馬立鑫 劉海燕 張兵權(quán)








摘要:文章介紹了一個(gè)基于Selenium、Pytest和Allure的Web自動(dòng)化測(cè)試框架,它能夠提高測(cè)試效率,減少測(cè)試人員的工作量,并生成美觀的測(cè)試報(bào)告。詳細(xì)介紹了該框架的功能、組成部分、實(shí)現(xiàn)與應(yīng)用以及使用Jenkins進(jìn)行持續(xù)集成的過(guò)程。該框架能夠幫助團(tuán)隊(duì)更高效地測(cè)試Web應(yīng)用。
關(guān)鍵詞:Selenium;Pytest;自動(dòng)化測(cè)試
中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2023)34-0052-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID)
0 引言
如今越來(lái)越多的企業(yè)應(yīng)用選擇使用B/S架構(gòu)(即Web應(yīng)用),B/S架構(gòu)相對(duì)于C/S架構(gòu)更具有跨平臺(tái)、維護(hù)簡(jiǎn)便、數(shù)據(jù)安全性高、部署靈活性強(qiáng)和兼容性好等優(yōu)點(diǎn)。這些特點(diǎn)使得B/S架構(gòu)成為大多數(shù)Web應(yīng)用程序開發(fā)的首選架構(gòu)[1]。
隨著Web應(yīng)用不斷的擴(kuò)充,Web應(yīng)用的自動(dòng)化測(cè)試也在逐漸成為軟件自動(dòng)化測(cè)試的重要內(nèi)容。近年來(lái)誕生了許多自動(dòng)化測(cè)試工具,比較成熟的有QTP、Selenium、RFT等[2]65,其中Selenium具有多項(xiàng)優(yōu)良特性,成為Web應(yīng)用測(cè)試最受歡迎的工具之一。本文將基于Selenium并結(jié)合Pytest、Allure等工具實(shí)現(xiàn)一個(gè)Web自動(dòng)化測(cè)試框架。
1 自動(dòng)化測(cè)試相關(guān)技術(shù)和工具
1.1 Selenium測(cè)試工具
Selenium可以模擬真實(shí)用戶操作,以此進(jìn)行Web自動(dòng)化測(cè)試。Selenium具有開源免費(fèi)的特點(diǎn),可以進(jìn)行二次開發(fā),具有一定的可擴(kuò)展性[3]16。
1.2 Pytest測(cè)試框架
Pytest是一個(gè)非常成熟的Python測(cè)試框架,它可以和Selenium結(jié)合實(shí)現(xiàn)自動(dòng)化測(cè)試,也可以結(jié)合Allure-pytest插件生成Allure報(bào)告。
1.3 Allure報(bào)告生成工具
Allure是一款輕量級(jí)的自動(dòng)化測(cè)試報(bào)告生成框架。它支持絕大部分測(cè)試框架,它可以生成美觀、易讀的測(cè)試報(bào)告,提供了詳細(xì)的測(cè)試結(jié)果和統(tǒng)計(jì)信息。
1.4 Jenkins持續(xù)集成工具
Jenkins是一個(gè)開源的持續(xù)集成和交付工具,它能夠幫助團(tuán)隊(duì)自動(dòng)執(zhí)行測(cè)試任務(wù),提高了測(cè)試的效率[4]108。
2 框架功能分析
2.1 功能自動(dòng)化測(cè)試
Web項(xiàng)目的功能測(cè)試屬于黑盒測(cè)試。具體測(cè)試內(nèi)容包括:網(wǎng)頁(yè)鏈接是否可以正常打開與關(guān)閉,網(wǎng)頁(yè)內(nèi)容是否顯示無(wú)誤,網(wǎng)頁(yè)元素功能是否正常等。主要操作方式是通過(guò)對(duì)元素進(jìn)行識(shí)別、定位、點(diǎn)擊、文本輸入等完成測(cè)試[5]105。
2.2 頁(yè)面對(duì)象管理
頁(yè)面對(duì)象設(shè)計(jì)模式用于管理和組織 Web 自動(dòng)化測(cè)試代碼。在頁(yè)面對(duì)象模式中,每個(gè)頁(yè)面都有一個(gè)對(duì)應(yīng)的頁(yè)面對(duì)象類,每個(gè)類中封裝了相關(guān)的元素定位方式和操作方法,測(cè)試腳本只需要調(diào)用類中的方法即可完成對(duì)應(yīng)業(yè)務(wù)邏輯的測(cè)試[2]65。
2.3 框架的主要功能
自動(dòng)化測(cè)試框架需要完成Web應(yīng)用的測(cè)試需求,主要功能包括:測(cè)試用例的維護(hù)和管理,保證測(cè)試數(shù)據(jù)的完整[3]109;確保數(shù)據(jù)驅(qū)動(dòng)測(cè)試的實(shí)現(xiàn);能夠完成被測(cè)項(xiàng)目業(yè)務(wù)邏輯的封裝,并組合頁(yè)面元素的操作實(shí)現(xiàn)對(duì)應(yīng)的業(yè)務(wù)邏輯;可以很好地通過(guò)可視化的測(cè)試報(bào)告呈現(xiàn)測(cè)試結(jié)果;具有優(yōu)良的可擴(kuò)展性;能夠提高測(cè)試的效率。
2.4 框架的組成部分
測(cè)試模塊主要由基礎(chǔ)類庫(kù)層、頁(yè)面封裝層、測(cè)試用例層、工具模塊、持續(xù)集成工具等構(gòu)成,如圖1所示。
1) 基礎(chǔ)類庫(kù)層:Common包中存放著公共類其中封裝了所有操作,包括查找一個(gè)元素、輸入文本、點(diǎn)擊操作等操作。在測(cè)試過(guò)程中還有一些場(chǎng)景需要進(jìn)行截圖操作,在基礎(chǔ)類庫(kù)層中定義一個(gè)截圖方法并指定截圖的存儲(chǔ)路徑,截圖保存時(shí)命名為“頁(yè)面(功能名稱)(當(dāng)前時(shí)間).png”格式。
2) 頁(yè)面封裝層:Page包中的所有頁(yè)面層均繼承基礎(chǔ)類庫(kù)層,在頁(yè)面層中封裝元素的定位方式包括:Xpath、ID、CSS等八種定位方式和元素的定位路徑,并調(diào)用基礎(chǔ)類庫(kù)層實(shí)現(xiàn)元素的定位與操作[4]109。
3) 測(cè)試用例層:TestCase包中存放測(cè)試用例文件,每個(gè)測(cè)試用例文件都包含一個(gè)完整業(yè)務(wù)邏輯的測(cè)試用例。測(cè)試用例層可以調(diào)用一個(gè)或多個(gè)頁(yè)面封裝層,來(lái)實(shí)現(xiàn)特定場(chǎng)景的測(cè)試[4]。
4) 工具模塊:Utils包中存放工具類,其中包含自定義日志類,在其中定義日志的存儲(chǔ)路徑、日志的級(jí)別等。
5) 持續(xù)集成工具:測(cè)試框架集成了Jenkins持續(xù)集成工具,構(gòu)建完成后自動(dòng)生成測(cè)試報(bào)告[4]108,測(cè)試人員可以通過(guò)Jenkins管理員賬號(hào)查看測(cè)試報(bào)告和日志。
3 框架實(shí)現(xiàn)與應(yīng)用
3.1 環(huán)境搭建
實(shí)現(xiàn)自動(dòng)化測(cè)試首先需要安裝Python3軟件并配置環(huán)境變量。然后安裝Selenium、Pytest、Allure-pytets和Jenkins等工具。Selenium用于Web應(yīng)用自動(dòng)化測(cè)試。Pytest用于組織和執(zhí)行測(cè)試腳本。Allure用于生成豐富的測(cè)試報(bào)告。Jenkins用于自動(dòng)化執(zhí)行測(cè)試任務(wù)。
此外還需下載對(duì)應(yīng)的瀏覽器驅(qū)動(dòng),例如Chrome瀏覽器需要下載Chrome Driver,用于Selenium與瀏覽器進(jìn)行交互。
安裝完成后,使用Selenium提供的API結(jié)合Python編程語(yǔ)言編寫測(cè)試腳本,使用Pytest框架組織和執(zhí)行測(cè)試腳本,使用Allure-pytest生成測(cè)試報(bào)告,最后使用Jenkins進(jìn)行持續(xù)集成,自動(dòng)化執(zhí)行測(cè)試任務(wù)。
本系統(tǒng)使用的主要工具架構(gòu)圖如圖2所示。
3.2 測(cè)試用例設(shè)計(jì)
本文以某系統(tǒng)的登錄模塊,單車管理模塊作為自動(dòng)化測(cè)試框架的測(cè)試對(duì)象,該部分的測(cè)試用例設(shè)計(jì)如表1所示。采用等價(jià)類劃分法設(shè)計(jì)登錄模塊的測(cè)試用例。
3.3 自動(dòng)化測(cè)試實(shí)現(xiàn)
在進(jìn)行測(cè)試實(shí)現(xiàn)時(shí),首先需要進(jìn)行測(cè)試頁(yè)面的頁(yè)面對(duì)象設(shè)計(jì),以實(shí)現(xiàn)頁(yè)面元素的封裝;其次需要進(jìn)行測(cè)試用例的封裝,采用數(shù)據(jù)驅(qū)動(dòng)的方式來(lái)組織測(cè)試數(shù)據(jù);完成以上步驟后執(zhí)行測(cè)試,生成測(cè)試報(bào)告;最后使用持續(xù)集成工具來(lái)構(gòu)建項(xiàng)目并自動(dòng)執(zhí)行測(cè)試。
1) 頁(yè)面對(duì)象設(shè)計(jì)
本框架在模塊設(shè)計(jì)上使用了Page-Object思想,每個(gè)頁(yè)面都會(huì)有一個(gè)對(duì)應(yīng)的頁(yè)面類,在頁(yè)面類中封裝該頁(yè)面的元素和操作方法。 以登錄模塊為例,在Login類中以元組的形式封裝登錄頁(yè)面所需的用戶名、密碼和登錄按鈕,封裝代碼如圖3所示。
圖3方框中標(biāo)出的對(duì)象自上而下分別為用戶名輸入框、密碼輸入框以及登錄按鈕,以元組的方式封裝元素定位方式By.XPATH和定位路徑。
2) 數(shù)據(jù)驅(qū)動(dòng)
使用Pytest內(nèi)置的參數(shù)化功能進(jìn)行數(shù)據(jù)封裝實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),完成測(cè)試數(shù)據(jù)和測(cè)試邏輯分離。以登錄模塊為例,將登錄所需的用戶名和密碼封裝為一個(gè)元組,使用Pytest的參數(shù)化裝飾器將此元組作為參數(shù)傳遞給登錄函數(shù),關(guān)鍵代碼如圖4所示。
圖4方框中使用了Pytest的 @pytest.mark.parametrize修飾器,將用戶名和密碼封裝為一個(gè)元組并作為參數(shù)傳遞給登錄函數(shù),在函數(shù)中進(jìn)行調(diào)用完成登錄功能的測(cè)試。
3) 測(cè)試報(bào)告
在測(cè)試框架中使用Allure-pytest庫(kù)生成自定義測(cè)試報(bào)告。該庫(kù)提供了修飾器和注解,用于標(biāo)注測(cè)試用例的功能模塊、標(biāo)題以及重要級(jí)別,從而生成詳細(xì)的測(cè)試報(bào)告。在測(cè)試報(bào)告中可以查看測(cè)試用例狀態(tài)圖,該圖標(biāo)注了測(cè)試用例通過(guò)百分比,還標(biāo)注出了失敗故障以及跳過(guò)的比例。報(bào)告樣式如圖5所示。
除用例狀態(tài)圖外,還可以查看詳細(xì)的功能報(bào)告,其中包括測(cè)試模塊、測(cè)試用例、測(cè)試數(shù)據(jù)、測(cè)試用例耗時(shí),以及測(cè)試日志等內(nèi)容詳細(xì)界面如圖6所示。
圖6中左半部分為所有的測(cè)試模塊及其詳細(xì)數(shù)據(jù),例如在登錄模塊下可以看到五個(gè)測(cè)試用例,在測(cè)試用例下可以看到測(cè)試數(shù)據(jù)、用例狀態(tài)和用例耗時(shí)。右半部分是單個(gè)測(cè)試用例的詳細(xì)數(shù)據(jù),主要包括測(cè)試用例的優(yōu)先級(jí)、耗時(shí)、參數(shù)和日志。
4) 持續(xù)集成工具
本框架使用Jenkins作為持續(xù)集成工具,用于自動(dòng)化打包部署和測(cè)試報(bào)告的生成。在Jenkins中,可以通過(guò)點(diǎn)擊測(cè)試報(bào)告來(lái)查看詳細(xì)的測(cè)試結(jié)果。每次構(gòu)建完成后,可以查看上次構(gòu)建的成功與失敗情況,以及構(gòu)建所花費(fèi)的時(shí)間等信息。具體的界面如圖7所示。
圖7中方框標(biāo)出的對(duì)象從左往右依次是查看測(cè)試報(bào)告按鈕、上次成功時(shí)間、上次失敗時(shí)間、上次持續(xù)時(shí)間以及構(gòu)建按鈕。
3.4 框架評(píng)估
本框架可以增加代碼的復(fù)用率,可以生成較美觀的測(cè)試報(bào)告,在回歸測(cè)試以及其他測(cè)試中具有較好的效果。測(cè)試人員可以較輕松地完成測(cè)試工作,通過(guò)自定義的測(cè)試報(bào)告和截圖可以很好地分析出測(cè)試失敗的原因,因此使用本框架可以幫助團(tuán)隊(duì)更高效地測(cè)試Web應(yīng)用。
4 結(jié)束語(yǔ)
本文提出的一種基于Selenium和Pytest的Web自動(dòng)化測(cè)試框架,可以減少代碼冗余,以及編寫腳本的時(shí)間,提高測(cè)試效率,減少測(cè)試工作量,使用該框架可以生成優(yōu)美的測(cè)試報(bào)告,用例執(zhí)行后生成截圖和日志供測(cè)試人員分析,使用本框架可以更高效、更便捷地完成測(cè)試任務(wù)。本框架在一些任務(wù)上還存在不足,例如測(cè)試手機(jī)登錄時(shí)選擇驗(yàn)證碼登錄的功能不能實(shí)現(xiàn)自動(dòng)化,對(duì)于一些復(fù)雜的驗(yàn)證碼,則需要在后期的研究中進(jìn)行實(shí)現(xiàn)。
參考文獻(xiàn):
[1] 單攀攀.一種基于Selenium與Unittest的Web自動(dòng)化測(cè)試框架[J].信息技術(shù)與網(wǎng)絡(luò)安全,2021,40(9):77-80.
[2] 羊昌燕,鄧印凱.基于Selenium的自動(dòng)化測(cè)試框架設(shè)計(jì)[J].信息技術(shù)與信息化,2021(10):65-68.
[3] 楊靜.自動(dòng)化測(cè)試平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2020.
[4] 吳伶琳,方巍.Web自動(dòng)化測(cè)試開源框架研究[J].信息技術(shù)與信息化,2022(11):108-111.
[5] 朱佳藝,劉從軍.基于Selenium的自動(dòng)化測(cè)試框架設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2023,22(5):103-108.
【通聯(lián)編輯:謝媛媛】