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