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