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