李慶鈺,翟柳,李貞,郝琳
(北華航天工業(yè)學(xué)院,河北 廊坊 065000)
近年來,軟件行業(yè)的發(fā)展十分迅速,人們對軟件質(zhì)量的要求越來越高。為了滿足廣大用戶的需求,在軟件開發(fā)過程中,迭代敏捷開發(fā)模型正在逐步替代傳統(tǒng)的測試模型,成為當(dāng)下主流的開發(fā)模型。迭代敏捷開發(fā)模型要求軟件在較短的時間內(nèi)有多個迭代版本,而如何保證這些版本的質(zhì)量,這就需要測試人員高效地開展測試工作。
目前軟件測試主要有兩種方式:手工測試和自動化測試。最初,受限于軟件測試技術(shù)的發(fā)展,軟件測試只能從最簡單的手工測試做起,軟件手工測試可以在很大程度上保證軟件的質(zhì)量,但是隨著軟件產(chǎn)品開發(fā)規(guī)模的擴(kuò)大,手工測試將會消耗大量的人力和物力,此外還十分依賴測試人員的技術(shù)能力。為了提高軟件的測試效率,人們開始引入自動化測試,自動化測試主要是借助測試工具來完成測試,減少了手工測試帶來的成本負(fù)擔(dān)。大量的測試實(shí)踐表明:自動化測試可以有效解決手工測試中存在的一些難題,首先是資源可以得到高效的利用,其次還可避免重復(fù)性的手工測試工作,可以在很大程度上縮減軟件測試的時間成本,進(jìn)一步提高測試效率。
雖然當(dāng)前的自動化測試工具發(fā)展十分迅速,市場上陸續(xù)出現(xiàn)了種類繁多的自動化測試工具(如QTP、selenium、Sikulix 等),每個自動化測試工具的側(cè)重點(diǎn)不盡相同,但大多數(shù)都是基于關(guān)鍵字驅(qū)動或數(shù)據(jù)驅(qū)動。此外,現(xiàn)有大部分自動化測試工具無法對軟件間的通信進(jìn)行測試。因此,本文針對軟件測試的現(xiàn)狀,在現(xiàn)有自動化測試技術(shù)的基礎(chǔ)上提出一種基于命令字驅(qū)動的自動化測試框架,通過該框架可實(shí)現(xiàn)通信以及UI 界面測試。
數(shù)據(jù)驅(qū)動自動化測試是指借助數(shù)據(jù)文件(Excel、文本及yaml 文件等)進(jìn)行數(shù)據(jù)的讀取,測試數(shù)據(jù)全程中無須測試人員手動輸入,主要是借助數(shù)據(jù)文件來驅(qū)動和執(zhí)行測試腳本,實(shí)現(xiàn)自動化測試。這種測試方式可以將測試數(shù)據(jù)和測試腳本分離,有助于測試人員實(shí)現(xiàn)對測試數(shù)據(jù)和腳本的分類管理。一個測試腳本可對應(yīng)不同的測試數(shù)據(jù),測試人員可根據(jù)測試數(shù)據(jù)執(zhí)行多個測試用例??梢哉f,數(shù)據(jù)驅(qū)動技術(shù)大大提高了測試用例的復(fù)用率,降低了軟件測試的成本。
關(guān)鍵字驅(qū)動是在數(shù)據(jù)驅(qū)動的基礎(chǔ)上所做的改進(jìn)與提升,汲取了其將測試數(shù)據(jù)和測試腳本分離的優(yōu)點(diǎn)。關(guān)鍵字驅(qū)動基于分離的思想,分別實(shí)現(xiàn)了界面元素與測試對象的分離、測試描述與具體實(shí)現(xiàn)細(xì)節(jié)的分離以及數(shù)據(jù)與腳本的分離。通過分離界面控件和測試對象,將界面控件抽象并映射成一個個的邏輯對象,當(dāng)界面控件發(fā)生變化時,只會影響它們之間的映射關(guān)系,不會對測試產(chǎn)生影響。通過分離具體細(xì)節(jié)和測試表述,測試人員在進(jìn)行測試時,只需考慮要進(jìn)行什么測試以及測試結(jié)束后可以達(dá)到什么樣的效果,不需要考慮測試的每一步如何執(zhí)行。通過分離數(shù)據(jù)與腳本,可方便測試人員后期對數(shù)據(jù)和腳本的獨(dú)立維護(hù)。這三個分離是彼此獨(dú)立的,之間的相互影響較小。這種方式相對數(shù)據(jù)驅(qū)動在提高自動化測試效率上更進(jìn)了一步。
GUI(圖形用戶界面)自動化測試主要是用來進(jìn)行用戶交互式界面的測試,驗(yàn)證其界面的各個功能是否可以達(dá)到預(yù)期要求。測試人員采用自動化測試工具(如Airtest、sikuli、Selenium 等)編寫測試腳本,模擬用戶一系列的真實(shí)操作(如點(diǎn)擊、輸入文字以及鍵盤動作等),并以此實(shí)現(xiàn)相應(yīng)的功能。執(zhí)行GUI自動化測試的具體步驟主要分為三步:(1)確定具體測試的目標(biāo)源,對其進(jìn)行定位;(2)模擬用戶進(jìn)行操作(如鼠標(biāo)點(diǎn)擊、鼠標(biāo)拖動等),借助測試工具錄制測試腳本;(3)驗(yàn)證測試結(jié)果,運(yùn)行錄制完的測試腳本,檢查被測目標(biāo)是否發(fā)生狀態(tài)改變(如界面的跳轉(zhuǎn)等),最后與預(yù)期結(jié)果進(jìn)行比較。GUI 自動化測試更加人性化,彌補(bǔ)了關(guān)鍵字驅(qū)動在用戶交互式界面測試中表現(xiàn)出的不足,使自動化測試技術(shù)更加完善。
本測試框架在自動化測試工具Airtest的基礎(chǔ)上進(jìn)行了改進(jìn),結(jié)合關(guān)鍵字驅(qū)動和圖像識別技術(shù),設(shè)計并實(shí)現(xiàn)了基于命令字驅(qū)動的自動化測試框架。Airtest 是網(wǎng)易公司開源的基于圖像識別技術(shù)的自動化測試工具。該框架通過抽象UI 界面測試和通信測試中的公共方法為命令字,測試人員通過調(diào)用命令字來執(zhí)行測試。命令字通俗易懂,測試人員只需了解命令字的含義即可完成自動化測試腳本的錄制。框架主要從UI 界面和通信測試兩方面出發(fā),UI 界面測試主要是通過對Airtest 工具底層的API 進(jìn)行封裝,可實(shí)現(xiàn)鼠標(biāo)動作、鍵盤動作和結(jié)果斷言功能;通信測試主要是通過抽象通信過程中的常見命令(發(fā)送數(shù)據(jù)、新建設(shè)備等)為關(guān)鍵字,將其進(jìn)一步封裝成函數(shù)供框架調(diào)用。
本測試框架的整體架構(gòu)主要包括測試腳本編輯器模塊、測試報告生成器模塊、測試控件模塊以及通信設(shè)置模塊四個模塊,各個模塊之間各自獨(dú)立但又彼此關(guān)聯(lián)。自動化測試框架架構(gòu)圖如圖1所示。
圖1 自動化測試框架架構(gòu)圖
其中測試腳本編輯器模塊主要借助測試控件和通信設(shè)置兩個模塊實(shí)現(xiàn),腳本編輯語言主要是以Python 語言為主,采用Pytest 單元測試框架,測試人員可根據(jù)不同的測試場景選擇并點(diǎn)擊相應(yīng)的控件,即生成可執(zhí)行的測試腳本。測試腳本可單次或批量運(yùn)行。測試報告生成器模塊的功能實(shí)現(xiàn)過程為:測試報告借助Allure 開源測試報告框架,根據(jù)測試腳本實(shí)時生成測試報告,測試報告中包含每一步驟的詳細(xì)操作、截圖以及最后的結(jié)果驗(yàn)證,用戶可通過報告查看測試用例的詳細(xì)執(zhí)行情況。測試控件模塊主要提供界面交互動作和測試結(jié)果斷言兩項(xiàng)功能,其中界面交互動作主要包含鍵盤以及鼠標(biāo)動作(例如點(diǎn)擊、等待以及輸入文本等),測試結(jié)果斷言包含數(shù)字文本識別、圖片匹配、測試內(nèi)容匹配三部分內(nèi)容。通信設(shè)置模塊主要提供設(shè)備測試和設(shè)備通信數(shù)據(jù)管理兩項(xiàng)功能,測試設(shè)備主要是指服務(wù)端設(shè)備,其中設(shè)備之間的通信數(shù)據(jù)以十六進(jìn)制傳輸,設(shè)備及通信數(shù)據(jù)信息以XML 文件的形式存儲在本地。
基于命令字驅(qū)動的自動化測試框架進(jìn)行測試主要分為三大步:編輯測試腳本、運(yùn)行測試腳本以及測試結(jié)果生成,具體的測試過程如圖2所示。
圖2 測試過程圖
(1)編輯測試腳本。測試人員首先根據(jù)項(xiàng)目需求書完成測試用例的設(shè)計,然后在項(xiàng)目的根目錄下創(chuàng)建測試腳本(其中腳本命名以及腳本中的函數(shù)名須以test 開頭),最后根據(jù)測試用例依次選擇命令字完成測試腳本的錄制并進(jìn)行保存。
(2)運(yùn)行測試腳本。測試腳本編輯完成之后,測試人員選擇并打開測試腳本所在的目錄,通過終端命令完成測試腳本的運(yùn)行。運(yùn)行單個腳本可通過指定模塊的命令(pytest-vs t 腳本文件名)來實(shí)現(xiàn);運(yùn)行多個測試腳本可通過指定目錄的命令(pytest -vs 目錄)來實(shí)現(xiàn)。
(3)測試結(jié)果生成。測試腳本運(yùn)行結(jié)束后,會在相應(yīng)的目錄下生成測試報告和測試日志文件,測試報告以網(wǎng)頁的形式進(jìn)行展示,包含各個步驟的詳細(xì)記錄和執(zhí)行情況,方便測試人員及時查看測試情況。測試日志則是以文本的形式進(jìn)行記錄。測試人員可根據(jù)需要選擇和查看測試結(jié)果。
在基于命令字驅(qū)動的自動化框架的基礎(chǔ)上完成自動化測試系統(tǒng)的搭建,自動化測試系統(tǒng)整體 界面如圖3所示。
圖3 自動化測試系統(tǒng)整體界面
自動化測試系統(tǒng)主要分為測試腳本管理、系統(tǒng)菜單欄、系統(tǒng)工具欄、UI 界面測試命令字、腳本編輯區(qū)、控制臺以及通信管理七個部分。
其中測試腳本管理模塊位于系統(tǒng)的最左側(cè),測試人員可以新增腳本、新建文件夾、刪除腳本、修改腳本以及運(yùn)行、停止目錄中的測試腳本;系統(tǒng)菜單欄位于系統(tǒng)最頂層,主要包含查看測試報告和測試日志功能;系統(tǒng)工具欄位于系統(tǒng)菜單欄的下方,測試人員可以截圖,在腳本中插入圖片,保存文件,運(yùn)行或停止編輯區(qū)的測試腳本;UI 界面測試命令字位于測試腳本管理的右側(cè),主要包含鼠標(biāo)動作、鍵盤動作、斷言以及等待,其中鼠標(biāo)動作有Double Click(雙擊)、Right Click(右擊)、Swipe(滑動)等,鍵盤動作包含Text(輸入文本)、Keyevent(鍵盤動作)等,斷言包含Assert Img(判斷圖片是否相同)、Assert File(判斷文件是否存在)、Assert Ocr(判斷圖片中文字是否一致)等;腳本編輯區(qū)和控制臺位于系統(tǒng)中間部分,測試人員在編輯完測試腳本后可通過控制臺查看腳本執(zhí)行情況;通信管理位于系統(tǒng)最右側(cè),主要包含建立連接、Send data(發(fā)送數(shù)據(jù))、New Device(新建設(shè)備)等命令字。
本文在研究自動化測試技術(shù)的基礎(chǔ)上,通過對比分析現(xiàn)有的自動化測試工具,發(fā)現(xiàn)自動化測試工具Airtest 在UI 界面上的測試效果明顯優(yōu)于其他工具,因此選取該工具并結(jié)合本框架的測試需求,設(shè)計并實(shí)現(xiàn)一種基于命令字驅(qū)動的自動化測試框架,最后在該框架的基礎(chǔ)上實(shí)現(xiàn)了一個自動化測試系統(tǒng)。通過該系統(tǒng)可同時完成UI 界面和通信測試,有效提高了軟件的自動化測試效率。