自動化測試架構(gòu)之說
測試人員經(jīng)常想象——在無人值守的情況下,每天晚上測試工具自動運行成千上萬的測試用例,第二天早晨去上班,一打開電腦就能看到所有的測試任務(wù)已全部執(zhí)行完畢,測試報告也整整齊齊地出現(xiàn)在我們面前。如果能親身經(jīng)歷這種場景,一定會感到無比興奮和輕松!這種情景不是夢想,也并不遙遠,完全是可以實現(xiàn)的,只要借助一套靈活、可擴展的自動化測試框架即可幫助我們實現(xiàn)夢想。
為何要建立自動化測試架構(gòu)
在過去幾十年中,自動化測試已經(jīng)有了良好的發(fā)展。最初的測試工具只提供了簡單的捕捉/回放功能:記錄鍵盤和鼠標的操作,并捕捉屏幕,然后通過播放所記錄的操作進行驗證。這樣的腳本很難維護,從而要求開發(fā)功能和靈活性更強的測試工具,并能將這些工具很好地整合起來,使整個自動化測試過程的各個部分或各個階段能很好地銜接起來。這就需要構(gòu)造一個完整的自動化體系,形成自動化測試的流水線,使整個測試過程一氣呵成。這其中,不僅要包括自動化測試的執(zhí)行,還要包括自動化測試腳本的開發(fā)、軟件包自動部署以及測試報告自動生成等,才能將自動化開發(fā)、執(zhí)行和日常工作融合在一起。這一切都需依賴于自動化測試架構(gòu)。
針對上述討論,我們深知自動化測試所面臨的挑戰(zhàn)。面對挑戰(zhàn),必須采取以下這些相應(yīng)的對策,通過構(gòu)建適應(yīng)性很強的自動化測試框架來解決一系列問題。
1)需求頻繁的變化要求自動化測試具有一個靈活的適應(yīng)機制。我們知道,建造商品住房時,如果只澆灌混凝土框架,沒有砌墻,那么住戶就有更大的靈活性來設(shè)計自己的家,可以滿足住戶更多的個人需求。在某些商場、寫字樓的建筑上,這種考慮表現(xiàn)得更為充分,保留了很大的靈活空間供商家租用和裝修。
2)單元測試、集成測試和系統(tǒng)測試等的自動化實施能共享某些平臺和機制,讓這些測試有機地結(jié)合起來。例如,房屋的各個功能模塊,包括臥室、會客廳、廚房、衛(wèi)生間、窗戶、屋頂?shù)榷家锌蚣苤危拍苄纬蓪嵱玫摹⒐δ芡暾淖≌?/p>
3)大規(guī)模軟件團隊的協(xié)作和硬件資源的使用效率都要求一個良好的基礎(chǔ)設(shè)施來支撐自動化測試。例如,房屋的各個單元之間需要通過布置電線、水管、暖氣管、有線電視等網(wǎng)絡(luò),才能有機地結(jié)合起來,更好地支撐各個功能之間的協(xié)調(diào)和使用,更好地為住宅的主人服務(wù)。
從上面這些舉例可以得知,自動化測試也不例外,在進行具體的單元自動化測試、功能自動化測試和系統(tǒng)自動化測試之前,先要建立一個清晰的框架,才能包容自動化測試的各個功能單元,使將來各項自動化測試任務(wù)有機地結(jié)合起來,順利地開展工作。
解決什么問題
作為自動化測試框架,最根本的是要構(gòu)造一個良好的工作空間,能夠容納各種類型測試工具的執(zhí)行,以使這些工具能夠相互兼容,共享測試數(shù)據(jù)。如果能夠像Windows 操作系統(tǒng)那樣支持即插即用,任何測試工具都可以動態(tài)、方便地加入系統(tǒng)或從系統(tǒng)中移除,則再好不過。
其次,自動化測試框架需要能夠監(jiān)控測試執(zhí)行的過程,包括監(jiān)控測試對象資源(如CPU、內(nèi)存等)的使用,及時收集來自不同測試工具的測試結(jié)果,并將這些結(jié)果進行歸類和分析,生成相應(yīng)的測試報告,通過郵件和網(wǎng)站等發(fā)布出去。
再者,為了讓測試能夠在某個特定時刻(例如晚上)自動執(zhí)行,自動化測試框架應(yīng)具有事先安排(schedule)任務(wù)能力,并能夠支持維護測試環(huán)境和管理測試資源,包括管理硬件資源列表、支持測試狀態(tài)查詢和自動分發(fā)測試任務(wù)到相應(yīng)的測試機器上,并在規(guī)定的時間內(nèi)完成測試任務(wù)。
最后,自動化測試框架還應(yīng)能支持自動化測試的前期任務(wù),支持測試腳本的錄制、編輯和調(diào)試,支持測試腳本的快速開發(fā)和良好的維護性,而且能夠支持測試用例、測試套件(test suite)和其他測試活動的管理。
要構(gòu)建良好的自動化測試框架,還需要提供一些基礎(chǔ)設(shè)施來支持自動化測試,例如郵件服務(wù)、跨平臺的通信服務(wù)、分布式開發(fā)和運行環(huán)境等,如圖2-7 所示,一個良好的自動化測試框架應(yīng)具有下列能力。
1)提供非常有效的測試工作流程模型,如對任務(wù)安排、執(zhí)行、通知結(jié)果和生成報告等完整的過程支持。
2)支持多種腳本語言的錄制、編輯、調(diào)試和回放等集成開發(fā)環(huán)境。
3)完成各類測試任務(wù)的執(zhí)行。
4)有良好的擴充能力,如和第三方插件、工具的集成。
5)具有數(shù)據(jù)驅(qū)動、關(guān)鍵字驅(qū)動等腳本模式的支持。
6)具有分布式處理、遠程調(diào)用等不同的運行方式。
7)能獲取測試覆蓋率。

圖2-7 自動化測試框架要解決的問題
如果進一步抽象,自動化測試框架就是用來解決自動化測試中的公共問題的,包括公用的對象、公用的方法、公用的環(huán)境或數(shù)據(jù)等自動化測試框架的要素。
1)公用的對象。不同的測試用例會有一些相同的對象(如窗口、按鈕、菜單等)被重復(fù)使用,而這些公用的對象可以被抽取出來,在編寫腳本時隨時調(diào)用。如果需求發(fā)生變化,只需要修改這些公用對象的屬性即可,而不需要修改太多的測試腳本。而要做到這一點,就要求我們構(gòu)建對象庫,并建立實體對象和邏輯對象之間的映射。
2)公用的方法。公用的方法比較多,相當于腳本的基礎(chǔ)函數(shù),可以構(gòu)成基礎(chǔ)函數(shù)庫,供上層腳本調(diào)用。
3)公用的環(huán)境或數(shù)據(jù)。許多測試用例會在相同的測試環(huán)境上運行或使用相同的測試數(shù)據(jù),可將不同的測試環(huán)境或數(shù)據(jù)封裝起來,和測試用例進行靈活的組合,以增強腳本執(zhí)行的靈活性,并覆蓋更廣的測試范圍,降低測試風(fēng)險。
自動化測試框架應(yīng)支持腳本錄制、腳本開發(fā)、測試用例和測試套件的創(chuàng)建和執(zhí)行、遠程控制、分布式通信等功能,才能基本滿足測試自動化的需要。自動化測試框架還需要支持單元測試并與開發(fā)環(huán)境集成,如將集成開發(fā)環(huán)境Eclipse、軟件配置管理工具CVS/SubVersion 和軟件包構(gòu)建工具Ant/Maven等集成到這個框架中,以支持每日構(gòu)建和自動驗證測試。
如果自動化測試框架能管理測試項目、安排任務(wù),將產(chǎn)品用戶需求和測試需求很好地結(jié)合起來,那么測試目標更明確,測試的效率會得到進一步提高。測試結(jié)果的分析也是很重要的,一般要求在自動化測試框架中得到解決。最重要的是易用,將各個工具集成起來,并能使這些工具更好地發(fā)揮作用。例如,openqa.org 社區(qū)提供了一個工具Bromine,它集成了Selenium Core/RC,非常容易跟蹤和管理測試項目、需求、測試計劃、測試用例和缺陷,可以監(jiān)控缺陷的提交,將缺陷分派給相應(yīng)的開發(fā)人員來瀏覽和分析測試結(jié)果。
一個理想的自動化測試框架能解決上述問題,提供一個分布式的通信平臺、友好的人機交互界面和開放式架構(gòu),將自動化測試中所需要的各個關(guān)鍵部分有機地集成起來,形成一個為自動化測試服務(wù)的、完整的、層次清楚的開發(fā)平臺和運行環(huán)境,如圖2-8 所示,其中各主要部分的功能如下。

圖2-8 自動化測試框架示意圖
1)綜合管理平臺:可以將自動化測試中所有的工作內(nèi)容管理起來,相當于一個統(tǒng)一的入口(Portal),可以瀏覽每部分的內(nèi)容。
2)基于業(yè)務(wù)驅(qū)動的腳本集成開發(fā)環(huán)境:可便于構(gòu)造關(guān)鍵字驅(qū)動的腳本,為此要建立軟件系統(tǒng)的對象庫,并將這些對象映射為腳本中的邏輯對象,以減少軟件需求變化對腳本的影響。這個集成開發(fā)環(huán)境還包括腳本錄制、編輯等功能,并能和CVS、Ant 等工具集成。其中庫函數(shù)可以看做是關(guān)鍵字列表和關(guān)鍵字實現(xiàn),而對象映射可以看做是由對象庫和映射關(guān)系構(gòu)成的。
3)安排(Schedule)測試任務(wù):使任務(wù)可以定時啟動,自帶執(zhí)行測試任務(wù)。
4)監(jiān)控測試資源:在測試過程中,能夠及時發(fā)現(xiàn)問題,發(fā)出警告,并保留(記錄)相關(guān)數(shù)據(jù)。
5)控制中心(控制器):驅(qū)動測試工具,可以調(diào)用測試任務(wù),并將測試任務(wù)、測試腳本等分發(fā)給遠程機器。
6)遠程機器執(zhí)行測試任務(wù):通過代理實現(xiàn),而代理由控制中心來控制。
相關(guān)鏈接: