單攀攀
(上海維也知科技責任有限公司,上海201106)
軟件測試是為了提高軟件系統(tǒng)可靠性,保障軟件系統(tǒng)質量而存在。IEEE、ACM等組織制定了一系列的軟件測試流程標準。Carnegie Mellon主要進行了基于關鍵字驅動模型自動化測試的研究[1]。伴隨著互聯(lián)網技術的發(fā)展和自動化測試工具與方法的不斷完善和擴展,自動化測試技術越來越成為了當前軟件工程領域的熱門研究方向之一。
現(xiàn)今越來越多的企業(yè)應用在使用B/S架構[2](即Web),B/S架構解決了C/S架構存在的部分問題,不僅沒有客戶端的差異,而且用戶只需要安裝瀏覽器,不需要再額外安裝客戶端應用。假如應用的業(yè)務需求有所變更,僅僅將服務器端的應用程序進行更新即可。另外,客戶端應用將不會受限于操作系統(tǒng)的區(qū)別,當前主流的瀏覽器往往在多種操作系統(tǒng)下都有對應的版本可供使用。
隨著市場Web應用的不斷擴充,Web平臺的自動化測試或為軟件自動化測試的主要組成內容,目前軟件行業(yè)也在該方面取得了一些研究碩果。Throught Works公司研發(fā)了一系列開源的Selenium Web平臺的功能測試工具集,普遍應用于各式各樣的Web平臺自動化測試,其中特性不僅具有方便擴展、可跨平臺,還可支持多瀏覽器等。Selenium被諸多自動化Web測試框架所使用,最近幾年來已有眾多基于Selenium的Web自動化測試框架的研究成果逐漸被引起重視[3-4]。
在實際應用和實施過程中,自動化測試的框架與方法使用的越優(yōu)良,其長期應用所取得的收益也就越顯著。其中自動化測試的核心技術主要是設計與使用自動化測試框架,不適用的測試框架不能順利開展良好的自動化測試,即造成人力成本輸出,也不能保障產品質量。
目前許多Web自動化測試框架都是以Seleniun為基礎實現(xiàn)的,在已有的Selenium框架上進行的進一步封裝。目前已設計運營的Web自動化測試框架仍具有編寫測試腳本代價高、不夠穩(wěn)定等缺陷。在本文中設計了一種基于Selenium與Unittest的Web自動化測試框架,且運用到實際項目里進行驗證該測試框架的應用,在某種程度上提高了自動化測試的效率與穩(wěn)定性。
Unittest[5-7]是一個基于Python自帶的單元測試框架,常用來做單元測試使用。也經常應用到UI自動化測試和接口自動化測試中,用來管理和維護測試用例腳本。其中Unittest模塊包含了如下幾個模塊:TestCase(測試用例),TestSuit(測試集或測試套件[8]),TestLoader(加載用例),TextTestRunner(執(zhí)行用例)。能夠組織多個用例去執(zhí)行(可以把多條測試用例封裝成一個測試套件,實現(xiàn)批量執(zhí)行測試用例);提供了豐富的斷言方法,方便對用例執(zhí)行的結果進行判斷;能夠生成HTML格式的測試報告;使用Fixture功能可以減少代碼的冗余。具體用例調用流程如圖1所示。
圖1 Unittes用例調用流程
Selenium為Web平臺提供了一系列測試方法的測試工具。與其他測試框架不同的是,它是直接運行在瀏覽器之中,用戶可以非常清楚地看到瀏覽器執(zhí)行的每一步操作。工具的主要功能包括:測試與瀏覽器的兼容性,測試系統(tǒng)功能創(chuàng)建回歸測試檢驗軟件功能和用戶需求??蚣艿牡讓邮遣捎肑avaScript模擬用戶對瀏覽器的操作過程,測試腳本在瀏覽器之中的動作,直接從用戶的角度來測試程序。它的特點是簡單、易于操作,而且規(guī)避了瀏覽器兼容性問題。
Selenium[9-10]的核心是用JavaScript編寫的。這使得測試腳本可以在受支持的瀏覽器中運行。Selenium負責執(zhí)行從測試腳本接收到的命令,測試腳本要么是用JavaScript編寫的,要么是使用一種受支持的編程語言編寫的。Selenium測試工具的起源是2004年,由一些開源愛好者編寫的JavaScript測試工具不斷完善而來。發(fā)展到現(xiàn)在,已經成為了一個非常高效強大的開源測試框架。目前仍然有很多公司和個人在使用Selenium框架并且相當多的機構也繼續(xù)為它提供支持。
其中Page Object是Selenium自動化測試項目開發(fā)實踐的最佳設計模式之一,通過對界面元素和功能模塊的封裝減少冗余代碼,同時在后期維護中,若元素定位或功能模塊發(fā)生變化,只需要調整頁面元素或功能模塊封裝的代碼,提高測試用例的可維護性。
自動化測試軟件環(huán)境搭建步驟下:
第一步:安裝Python3軟件,并添加對應安裝目錄到本機的環(huán)境變量。
第二步:Python3安裝后默認會通過pip install selenium安裝selenium2工具(pip.exe默認在python的Scripts路徑下)。
第三步:瀏覽器與相應瀏覽器驅動版本的安裝是Web平臺自動化測試前提條件,注意事項路徑中不要有中文。
第四步:PyCharm編譯工具安裝,進行編寫腳本,具有極為智能的填充功能,提高腳本編寫效率。依靠它進行智能代碼完成,動態(tài)錯誤檢查、快速修復和項目導航等。
為了實現(xiàn)基于Selenium與Unittest的Web自動化測試框架,主要內容是4個基礎模塊設計,分別是頁面元素定位,基本功能方法的定義,測試用例設計與測試執(zhí)行生成報告模塊。其具體設計流程如圖2所示。
圖2 自動化測試框架設計流程圖
模塊一:頁面元素定位是UI自動化的主要內容之一,不論哪一種UI自動化測試框架,或者什么結構驅動,都需要針對某一個元素來操作,定位準確簡潔是非常重要的。通過運用Selenium自動化測試項目開發(fā)實踐的設計模式Page Object,提高代碼和用例的可維護性。
模塊二:基本功能方法的定義包括基礎的截屏方法,郵件發(fā)送方法,查找最近的測試報告方法等,為后續(xù)測試用例設計與用例執(zhí)行等提供方法支撐。
模塊三:測試用例設計引入Unittest單元測試框架設計測試用例,精簡代碼腳本,也更便于相關測試人員理解測試用例業(yè)務邏輯關系。
模塊四:測試執(zhí)行生成報告,通過基本功能方法,利用Unittest框架中執(zhí)行測試用例,生成測試報告,并發(fā)送最近測試報告給相關人員,對項目產品質量有一定的把控,進一步保障項目產品的質量。
現(xiàn)以真實項目Web平臺測試為基礎,通過實行平臺自動化用例的設計與腳本編寫,對比框架使用前后的成本分析如表1所示。
表1 框架使用前后成本對比
在執(zhí)行當中,該測試框架的測試優(yōu)勢比較顯著,編寫代碼簡便、易懂,腳本更易于維護。不論是冒煙測試,還是全量測試,測試成本均減少了50%,單用例的維護成本下降了60%。每個測試用例執(zhí)行后,該測試框架采用截圖方式保存本地,測試人員可根據結果截圖,并對應日志和業(yè)務需求快速進行預覽以定位問題,使得發(fā)現(xiàn)平臺問題更直觀。其中,每個版本測試的分析成本降低了75%,其缺陷發(fā)現(xiàn)率增加了近30%,數據表明通過使用該自動化測試框架,不僅減少了測試成本,還進一步提高了項目/產品質量。
具體應用樣例功能的詳細測試報告結果如圖3所示。該HTML測試報告通過定時任務可自動發(fā)送郵件給相關人員,用于監(jiān)控項目/產品執(zhí)行情況,并通過測試報告分析,從而進一步提升了Web應用的平臺質量。
圖3 Web應用自動化測試XML報告詳細結果圖
本文實現(xiàn)了一種基于Selenium與Unittest的Web自動化測試框架,并實際應用在項目產品自動測試中,有效節(jié)省了測試人員資源成本,提高整體產品迭代回歸的速度,保證產品質量的穩(wěn)定性。同時,隨著測試集群環(huán)境與業(yè)務需求的復雜多元化,一方面需要統(tǒng)一完整的自動化測試框架,另一方面需要減少自動化測試框架研發(fā)的開支,都必須進行深入的探求與研究工作。