贠海順
(中國航空工業(yè)集團公司西安航空計算技術(shù)研究所,陜西西安,710065)
通過工具(程序)的方式來代替或輔助手工測試的行為稱為自動化測試。自動化測試一般包括測試過程自動化和測試結(jié)果分析自動化,自動化測試能夠帶來的好處包括:
對程序的新版本運行已有的測試(回歸測試),能大大降低回歸測試的開銷;可以運行更多更頻繁的測試;可以執(zhí)行一些手動測試特別費時費力,甚至無法達到測試目的的項目。比如壓力測試,大數(shù)據(jù)或者大量重復(fù)數(shù)據(jù)測試,必須有自動化工具的支持;使測試具有一致性和可重復(fù)性;可以增加軟件信任度;可以更快地將軟件推向市場。
并非所有的軟件產(chǎn)品都適用于自動化測試,自動化測試適用的場景為:
(1)軟件需求及功能相對穩(wěn)定
測試腳本的穩(wěn)定性決定了自動化測試的維護成本。如果軟件需求變動過于頻繁,測試人員需要根據(jù)變動的需求來更新測試用例以及相關(guān)的測試腳本,如果腳本維護所花費的成本超過了利用其節(jié)省的測試成本,那么在不穩(wěn)定階段不適于自動化測試。
(2)項目周期足夠長
由于自動化測試需求的確定、自動化測試框架的設(shè)計、測試腳本的編寫與調(diào)試均需要相當(dāng)長的時間來完成。這樣的過程本身就是一個測試軟件的開發(fā)過程,需要較長的時間來完成。如果項目的周期比較短,沒有足夠的時間去支持這樣一個過程。
(3)自動化測試腳本可重復(fù)使用
如果投入大量資源開發(fā)了自動化測試腳本,但是腳本的重復(fù)使用率很低,致使其間所耗費的成本大于所創(chuàng)造的經(jīng)濟價值,自動化測試不能真正產(chǎn)生效益。
目前的測試框架及工具主要針對C/S架構(gòu)或B/S架構(gòu)的應(yīng)用,由于嵌入式軟件測試目標(biāo)及運行方式千差萬別,沒有專門用于嵌入式軟件測試的通用測試工具。為了解決嵌入式軟件測試過程中自動化測試問題,本文在介紹了已有的測試框架和工具的基礎(chǔ)上,提出了一種適合于嵌入式軟件的嵌入式軟件自動化測試框架,并著重描述了測試框架下的功能劃分和測試流程。
常見測試框架及工具包括:QTP,Rational Robot,Phoenix Framework,selenium,watir,Robot Framework 等。
自動化測試框架與工具主要分為兩類:一種是可提供可重用的基礎(chǔ)自動化測試模塊,如: selenium、watir等,它們主要提供最基礎(chǔ)的自動化測試功能,比如打開一個程序,模擬鼠標(biāo)和鍵盤來點擊或操作被測試對象,最后驗證被測對象的屬性以判斷程序的正確性;另外一種是可以提供自動化測試執(zhí)行和管理功能的架構(gòu)模塊,如:Phoenix Framework,Robot Framework等,它們本身不提供基礎(chǔ)的自動化測試支持,只是用于組織、管理和執(zhí)行那些獨立的自動化測試用例,測試完成后統(tǒng)計測試結(jié)果,通常這類框架一般都會集成一個基礎(chǔ)自動化測試模塊。
針對嵌入式軟件自動測試領(lǐng)域,利用已有的測試框架完成主機端的測試管理工作,如果測試腳本管理,測試報告的生成等;目標(biāo)機端完成實際測試執(zhí)行,主機端與目標(biāo)機端之間的通信與測試運行方案,則需要進行自行開發(fā)。
圖1 基于Robot Framework的自動化測試軟件架構(gòu)
基于Robot Framework的自動化測試軟件架構(gòu)如圖1所示。其中Test Data即測試腳本。Robot Framework啟動后,執(zhí)行Test Data中定義的測試腳本,產(chǎn)生測試日志和測試報告。測試庫的函數(shù)可以作為測試腳本中的關(guān)鍵字進行使用,由測試庫(Test Libraries)與目標(biāo)機端進行交互。嵌入式自動化測試采用Robot Framework測試框架+測試庫,測試庫負責(zé)與目標(biāo)機端進行交互,獲取目標(biāo)機端測試用例的運行結(jié)果,并返回給測試腳本。
測試庫主要功能為對目標(biāo)機端測試用例的運行過程進行控制,具體包括:定義主機端測試用例的映像描述文件,建立描述文件到測試用例映像之間的對應(yīng)關(guān)系;實現(xiàn)對目標(biāo)機的狀態(tài)查詢、應(yīng)用映像加載、復(fù)位等操作;實現(xiàn)主機端控制軟件與目標(biāo)機軟件的底層通信。測試庫功能結(jié)構(gòu)如圖2所示。
通信層通過低層通信代理完成與目標(biāo)機端的數(shù)據(jù)傳輸。協(xié)議控制層主要作用是在通信層的基礎(chǔ)上,定義實現(xiàn)主機端和目標(biāo)機端的命令協(xié)議。實現(xiàn):加載運行命令、重啟動命令、目標(biāo)機狀態(tài)查詢命令,定義測試開始和測試結(jié)束的交互信息約定、測試用例結(jié)果數(shù)據(jù)表示格式等規(guī)則信息。
(1) 執(zhí)行測試時,首先讀取測試描述文件,根據(jù)描述文件,檢查測試用例配置的完整性。檢查項包括:測試用例在映像文件是否存在,是否完整。
(2) 測試啟動后,測試控制層應(yīng)該檢查與目標(biāo)機端口的連接狀態(tài),及是否可以建立連接。
圖2 測試庫功能結(jié)構(gòu)圖
圖3 測試庫測試用例的執(zhí)行過程
(3) 在確認(rèn)目標(biāo)機端可用以后,讀取測試計劃中配置的測試用例映像,向目標(biāo)機發(fā)生加載、運行命令。
(4) 目標(biāo)機端,完成映像加載后,運行進入測試程序的入口,開始運行。運行開始時輸出開始測試標(biāo)識,運行結(jié)束后輸出測試結(jié)束標(biāo)識。運行過程信息及結(jié)果信息,可以通過串口終端、虛擬終端或主機文件系統(tǒng)保存到主機端。
(5) 主機端,等待獲取當(dāng)前測試用例的運行結(jié)束標(biāo)志,在等待過程中,每間隔一段時間,可以查詢一下目標(biāo)機端的狀態(tài),防止測試用例運行死機,陷入永久等待的情況。同時主機端在日志文件中記錄測試用例運行軌跡信息及主要操作步驟。
當(dāng)獲取到目標(biāo)機端口發(fā)送過來的測試結(jié)束狀態(tài)后,對測試結(jié)果進行分析,并向目標(biāo)機端口發(fā)送重啟命令,使目標(biāo)機進行模塊重啟,完成狀態(tài)清理。
(6) 當(dāng)前測試用例完成運行以后,返回當(dāng)前測試用例的執(zhí)行結(jié)果。
本文給出了一種適合于嵌入式軟件基于RobotFramework的自動化測試框架,描述了測試框架的功能劃分及自動化測試過程。針對項目周期長,需要經(jīng)過多輪回歸測試的復(fù)雜嵌入式系統(tǒng)軟件,可以有效提升測試效率,降低測試過程中人的工作量,為嵌入式軟件功能驗證提供有效的測試手段。
參考文獻
[1]李夏安,陳志泊.基于STAF的軟件自動化測試系統(tǒng)的研究和實現(xiàn)[J].計算機應(yīng)用,2009.03.