作者:吳雨晨 程旭,單位:中移集成智慧城市平臺部 品質(zhì)測試團(tuán)隊(duì)
在當(dāng)今快節(jié)奏的軟件開發(fā)環(huán)境中,高質(zhì)量的代碼交付至關(guān)重要。而針對經(jīng)過多次迭代,主要功能趨向穩(wěn)定的產(chǎn)品,大量傳統(tǒng)的重復(fù)性手動(dòng)測試方法已經(jīng)無法滿足高效、快速的需求。為了提高測試效率保證產(chǎn)品質(zhì)量,本文通過產(chǎn)品實(shí)踐應(yīng)用,引入一種強(qiáng)大而易用的自動(dòng)化測試方法——Python+Requests+Pytest。
Part 01●??為什么使用自動(dòng)化測試?●
自動(dòng)化測試是一種使用軟件工具和腳本來執(zhí)行測試用例的方法,能夠以比傳統(tǒng)手動(dòng)測試更高的效率、速度和準(zhǔn)確性來驗(yàn)證軟件的正確性。在不同階段的開發(fā)周期中,自動(dòng)化測試可以為團(tuán)隊(duì)帶來諸多好處。
? 自動(dòng)化測試提高了測試流程的效率
通過編寫可復(fù)用的測試腳本,自動(dòng)化測試能夠快速而準(zhǔn)確地執(zhí)行大量用例,省去手動(dòng)執(zhí)行測試的繁瑣過程。使得測試團(tuán)隊(duì)能夠?qū)W⒂诟幸饬x的工作,如測試設(shè)計(jì)、缺陷管理和結(jié)果分析等。
? 自動(dòng)化測試大大減少了人為錯(cuò)誤的風(fēng)險(xiǎn)
相比于人工操作,自動(dòng)化測試在執(zhí)行測試過程中減少了潛在的人為錯(cuò)誤,提高了測試的準(zhǔn)確性和一致性。能夠幫助團(tuán)隊(duì)更早地發(fā)現(xiàn)和修復(fù)問題,提高軟件的穩(wěn)定性和質(zhì)量。
? 自動(dòng)化測試可以提高測試覆蓋率
通過編寫全面的測試腳本,自動(dòng)化測試能夠覆蓋更多的測試場景和邊界條件,發(fā)現(xiàn)隱藏的缺陷并提前預(yù)防潛在問題,有助于降低軟件開發(fā)周期中的風(fēng)險(xiǎn),并提高用戶體驗(yàn)。
在產(chǎn)品測試過程中,我們已經(jīng)應(yīng)用自動(dòng)化測試并取得了顯著的成果。無論是對于測試團(tuán)隊(duì)還是開發(fā)團(tuán)隊(duì),自動(dòng)化測試都能為我們節(jié)省大量時(shí)間和資源。傳統(tǒng)的手動(dòng)測試需要投入大量的人力和時(shí)間,而自動(dòng)化測試可以幫助團(tuán)隊(duì)節(jié)約寶貴的時(shí)間和資源,讓團(tuán)隊(duì)可以更好地應(yīng)對快速迭代、緊張的發(fā)布計(jì)劃和復(fù)雜的測試需求。
Part 02●??常見的自動(dòng)化測試方法對比?●
2.1 Python+Selenium
功能:主要用于自動(dòng)化執(zhí)行Web UI測試,可以模擬用戶在瀏覽器中的行為,如點(diǎn)擊、輸入和頁面導(dǎo)航等。
使用難度:需要基本的編程基礎(chǔ),編寫腳本來模擬用戶操作。
執(zhí)行效率:需要實(shí)際運(yùn)行瀏覽器來執(zhí)行測試,可能會(huì)占用較多的系統(tǒng)資源和時(shí)間。尤其是在大型測試套件中,執(zhí)行速度可能會(huì)受到影響。
生態(tài)系統(tǒng)與擴(kuò)展性:作為Python的一部分,擁有強(qiáng)大的生態(tài)系統(tǒng)和豐富的第三方庫,提供了大量的資源和支持。
2.2 Postman
功能:專注于接口測試和API測試,提供強(qiáng)大的界面和功能,可以輕松設(shè)置和發(fā)送HTTP請求,并驗(yàn)證返回結(jié)果。
使用難度:擁有直觀友好的用戶界面,無需編寫代碼,易于上手使用。即使沒有編程經(jīng)驗(yàn),也可以通過簡單的圖形界面操作完成測試。
執(zhí)行效率:由于直接發(fā)送HTTP請求,并且沒有瀏覽器渲染的開銷,因此執(zhí)行速度相對較快,適合大規(guī)模的接口測試。
生態(tài)系統(tǒng)和擴(kuò)展性:有龐大的用戶社區(qū)和豐富的第三方插件,可以擴(kuò)展測試的功能,例如生成報(bào)告、集成測試等。
2.3 Python+Requests
功能:靈活的HTTP庫,用于發(fā)送各種類型的HTTP請求,如GET、POST、PUT和DELETE,并對響應(yīng)進(jìn)行驗(yàn)證。
使用難度:需要一定編程知識,通過編寫Python腳本來發(fā)送HTTP請求和驗(yàn)證響應(yīng)。對于有Python經(jīng)驗(yàn)的開發(fā)人員來說會(huì)更加容易上手。
執(zhí)行效率:具有較高的執(zhí)行效率,適用于大型項(xiàng)目或需要頻繁執(zhí)行測試的情況。
生態(tài)系統(tǒng)和擴(kuò)展性:作為Python的一部分,擁有龐大的社區(qū)和豐富的生態(tài)系統(tǒng),可以輕松集成其他庫和框架,滿足復(fù)雜的測試需求。
通過從功能效果、使用難度、執(zhí)行效率和功能擴(kuò)展等多方面進(jìn)行綜合考量可以得出結(jié)論,Python+Selenium WebUi屬于較重量級測試工具,要求產(chǎn)品界面穩(wěn)定,功能變化小等要求;采用這種方式測試腳本輸出的速度較慢,后期維護(hù)較為耗時(shí)間;而Postman的優(yōu)點(diǎn)為上手較快,輸出用例較快,但其缺點(diǎn)也比較明顯,無測試套導(dǎo)致用例無法進(jìn)行隔離,問題定位困難,團(tuán)隊(duì)協(xié)同開發(fā)存在一定困難;Python+Requests方法在覆蓋度上較于UI自動(dòng)化較弱,但無論是協(xié)同開發(fā)及登陸適配等,簡單易用、輕量級、靈活性、可擴(kuò)展性、豐富的資源和跨平臺兼容性等均有一定優(yōu)勢,因此最終我們選擇Python+Requests方法進(jìn)行自動(dòng)化測試。
Part 03●??架構(gòu)優(yōu)勢?●
自動(dòng)化測試框架我們選擇了Pytest,Pytest自動(dòng)化框架主要具有以下優(yōu)勢:
簡單靈活,容易上手
Pytest不需要使用繁瑣的類繼承和裝飾器,而是使用了一種更簡潔的測試函數(shù)和約定來組織測試代碼;Pytest會(huì)自動(dòng)查找項(xiàng)目中以"test_“開頭或以”_test"結(jié)尾的文件、模塊和函數(shù),并將其識別為測試用例。此外,Pytest支持多種斷言方式,包括內(nèi)置的Assert語句、第三方的Assert庫(如Pytest-assume、Pytest-check等)以及自定義的斷言函數(shù),可以選擇最適合的斷言方式,檢查代碼的正確性,快速定位問題,并及時(shí)修復(fù)。
支持參數(shù)化
Pytest支持參數(shù)化測試,可以使用@Pytest.mark.parametrize裝飾器為測試函數(shù)傳遞不同的參數(shù),并運(yùn)行多次測試,簡化重復(fù)測試代碼的編寫和維護(hù),提高測試用例的重用性。
豐富的插件生態(tài)系統(tǒng)并且可以自定義擴(kuò)展
Pytest擁有大量的第三方插件,可通過安裝配置插件來擴(kuò)展和定制測試框架的功能,從而滿足各種測試需求。而且,Pytest可以和Allure結(jié)合生成非常易讀的定制的報(bào)告,還可以和Jenkins實(shí)現(xiàn)持續(xù)集成。
總體來說,Pytest是一個(gè)功能強(qiáng)大、易用且靈活的自動(dòng)化測試框架。無需手動(dòng)管理測試套件,可以快速添加、刪除或修改測試文件,簡化了測試用例的組織和維護(hù)。它廣泛應(yīng)用于Python項(xiàng)目中,為測試團(tuán)隊(duì)提供了一種簡潔、高效和可拓展的方式來編寫和管理測試用例。Pytest的高靈活性和高擴(kuò)展性,使得定制化測試框架變得非常簡單。
Part 04●??實(shí)踐應(yīng)用?●
根據(jù)自動(dòng)化測試的特點(diǎn),能夠應(yīng)用自動(dòng)化測試的產(chǎn)品應(yīng)是需求穩(wěn)定,不會(huì)頻繁進(jìn)行變更,研發(fā)和維護(hù)周期較長,需要頻繁執(zhí)行回歸測試,需要在多種平臺上重復(fù)運(yùn)行相同測試場景,且開發(fā)較為規(guī)范,系統(tǒng)可測試性高的產(chǎn)品。
目前,我們已經(jīng)使用Python+Requests+Pytest自動(dòng)化測試方法,在產(chǎn)品測試過程中進(jìn)行實(shí)踐應(yīng)用,整體框架主要分為四層:
1、用例組織層:使用Pytest框架,包括TestCase,Allure測試報(bào)告模塊,RunTestCase啟動(dòng)模塊及操作日志記錄,用例組織層主要用于最終的用例連跑,測試報(bào)告輸出及日志記錄輸出。
2、自動(dòng)化測試核心代碼層:以頁面為單位組織實(shí)現(xiàn)相關(guān)業(yè)務(wù),提供給上層,即用例組織層進(jìn)行業(yè)務(wù)判斷。
3、Tools模塊:主要常用工具模塊,如日志模塊,Token獲取方法,讀取參數(shù)工具,提供給上層使用。
4、配置文件模塊:該層主要記錄靜態(tài)配置,如URL,Body體以及測試環(huán)境等相關(guān)信息。除Config配置文件,還需形成一個(gè)Excel文件,進(jìn)行URL管理、URL別名管理、Body管理等。
在進(jìn)行自動(dòng)化腳本的編寫過程中,我們主要遵循以下原則:
1、用例之間應(yīng)是獨(dú)立的,沒有依賴關(guān)系,可以獨(dú)立運(yùn)行。
2、用例執(zhí)行沒有順序要求,隨機(jī)順序可以正常執(zhí)行。
3、每個(gè)用例都能重復(fù)運(yùn)行,運(yùn)行結(jié)果不會(huì)影響其他用例。
使用這種自動(dòng)化測試方法,在對產(chǎn)品進(jìn)行自動(dòng)化測試時(shí)可自定義測試模塊,在每次用例腳本連跑完成后,能夠直接生成清晰、易讀性高的測試報(bào)告。
Part 05●?實(shí)踐效果?●
當(dāng)前該自動(dòng)化測試方法已在中移系統(tǒng)集成有限公司智慧城市平臺部7個(gè)產(chǎn)品進(jìn)行實(shí)踐應(yīng)用,預(yù)計(jì)產(chǎn)生自動(dòng)化功能用例超過1500個(gè),當(dāng)前已完成85%以上。我們完成了多個(gè)產(chǎn)品的自動(dòng)化工程部署,支持一鍵式運(yùn)行,測試模塊可選擇,測試環(huán)境可靈活變更,測試報(bào)告可實(shí)時(shí)生成在線查看,整體流程最快縮短至5分鐘,加速了測試過程并極大地提升了測試效率,有力地保障產(chǎn)品質(zhì)量及穩(wěn)定性。