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