前言
隨著項(xiàng)目對(duì)外輸出的接口日漸增多象对,接口測(cè)試逐漸提上日程黑忱。經(jīng)過(guò)一段時(shí)間的學(xué)習(xí)和摸索后,總結(jié)了一下勒魔。
方案
對(duì)于一些比較簡(jiǎn)單的接口甫煞,我們希望可以通過(guò)csv文件進(jìn)行編輯和整理用例,對(duì)于一些復(fù)雜的接口可以通過(guò)自定義腳本的方式去實(shí)現(xiàn)冠绢,在執(zhí)行完成后抚吠,以郵件的形式發(fā)送給相關(guān)同學(xué)。
為什么用CSV文件呢弟胀??接口測(cè)試大多數(shù)測(cè)試用例會(huì)比較相似楷力,對(duì)類似的接口進(jìn)行反復(fù)相同的校驗(yàn)。針對(duì)這種簡(jiǎn)單的情況孵户,我們希望把測(cè)試用例與測(cè)試腳本分開(kāi)萧朝。如果重復(fù)用數(shù)據(jù)去請(qǐng)求和重寫(xiě),是對(duì)測(cè)試資源的一種浪費(fèi)夏哭,而CSV文件可以直接用EXCEL進(jìn)行編輯检柬,讀取也非常方便,因此選作我們測(cè)試的用例集合竖配。
如何參與測(cè)試何址?
1、對(duì)于簡(jiǎn)單的接口进胯,我們直接用excel對(duì)csv文件進(jìn)行編輯头朱。
在選擇添加的時(shí)候,可以填寫(xiě)當(dāng)前請(qǐng)求的請(qǐng)求頭和請(qǐng)求數(shù)據(jù)(部分舉例)龄减。
2、對(duì)于一些復(fù)雜的接口班眯,我們可以自定義腳本希停。
支持自定義腳本的好處是,我們既可以單獨(dú)運(yùn)行自定義測(cè)試腳本署隘,也可以將自定義的文件納入全部測(cè)試用例中宠能,作為回歸測(cè)試一起執(zhí)行。
開(kāi)發(fā)流程
測(cè)試用例準(zhǔn)備——執(zhí)行測(cè)試用例磁餐、生成質(zhì)量報(bào)告——自動(dòng)發(fā)送郵件
1违崇、測(cè)試用例準(zhǔn)備
測(cè)試用例包括兩部分阿弃,自定義測(cè)試腳本中的測(cè)試用例和CSV文件中自動(dòng)讀取的測(cè)試用例。
Unittest是Python自帶的單元測(cè)試框架羞延,默認(rèn)有TestCase渣淳、TestResult、TestRunner等方法伴箩,非常方便入愧。自定義接口測(cè)試的腳本類通過(guò)繼承Unittest,編寫(xiě)并驗(yàn)證一些較復(fù)雜的接口嗤谚。
為兼容自定義接口用例與文件讀取的接口用例類型棺蛛,從文件中讀取的接口用例也需繼承Unittest類。主要的實(shí)現(xiàn)思路是從指定CSV文件里面中讀取數(shù)據(jù)巩步,每讀取一行旁赊,便通過(guò)自定義工場(chǎng)類TestFactory創(chuàng)建一個(gè)繼承于Unittest的AutoTest的類。
AutoTest類當(dāng)中椅野,通過(guò)unittest默認(rèn)的setUP()方法對(duì)每個(gè)參數(shù)進(jìn)行初始化终畅、judge_rule()方法對(duì)每行輸入的數(shù)據(jù)進(jìn)行重新處理(關(guān)于接口md5加密、urlencode鳄橘、時(shí)間戳等)声离、test函數(shù)對(duì)接口進(jìn)行簡(jiǎn)單的驗(yàn)證。
#每讀取一行瘫怜,變加入TestSuit里一個(gè)已test為名的用例
test_case?=self.testf.create_test(row)
self.test_suit.addTests(map(test_case,?["test"]))
#通過(guò)unittest方法獲取到自定義以_test為后綴名的用例
self.get_auto_test_suit?=?unittest.defaultTestLoader.discover("../basepages/",pattern='*_test.py')
#將兩部分用例 通過(guò)addTests方法合并在一起术徊,就是全部的接口測(cè)試用例
2、執(zhí)行測(cè)試用例鲸湃、生成質(zhì)量報(bào)告
引入了BSTestRunner赠涮,對(duì)其進(jìn)行修改和編輯后,生成測(cè)試報(bào)告暗挑。BSTestRunner也是通過(guò)重寫(xiě)Unittest的TestResult方法笋除,對(duì)執(zhí)行的結(jié)果進(jìn)行展示。
在生成質(zhì)量報(bào)告中炸裆,BSTestRunner生成全部用例的執(zhí)行結(jié)果報(bào)告垃它。面對(duì)這個(gè)情況,我們希望可生成兩份報(bào)告烹看,一份僅記錄執(zhí)行失敗的用例報(bào)告国拇,另一份為原生的全部用例執(zhí)行結(jié)果報(bào)告。所以在BSTestRunner的基礎(chǔ)上稍微進(jìn)行了些改進(jìn)惯殊,讓其生成兩份報(bào)告酱吝。
#?自動(dòng)化測(cè)試報(bào)告
fp?=open('../doc/my_report.html','wb')
#?僅錯(cuò)誤版測(cè)試報(bào)告
fpe?=open('../doc/my_report_email_text.html','wb')
runner?=?BSTestRunner.BSTestRunner(
stream=fp,
stream2=?fpe,
title='接口測(cè)試自動(dòng)質(zhì)量報(bào)告',
description='如需接口測(cè)試完整報(bào)告'
)
這里簡(jiǎn)單給大家介紹下BSTestRunner這個(gè)引入的開(kāi)源測(cè)試框架。
BSTestRunner 繼承于 Template_mixin類土思,通過(guò)調(diào)用sortResult方法务热,將用例傳給_TestResult類忆嗜,獲取到執(zhí)行結(jié)果,用getReportAttribute()方法崎岂,將結(jié)果在html中展示出來(lái)捆毫。
了解這個(gè)開(kāi)發(fā)測(cè)試框架后,我們對(duì)其改動(dòng)就會(huì)很方便该镣,這里我們重新定義了一個(gè)getReport()方法冻璃,僅將錯(cuò)誤的執(zhí)行結(jié)果在另一個(gè)html中保存。
3损合、發(fā)送測(cè)試報(bào)告郵件
使用python的smtpserver進(jìn)行發(fā)送郵件省艳,默認(rèn)發(fā)送的郵件需要到具體郵箱里設(shè)置授權(quán),這里注意password是授權(quán)碼嫁审,不是郵箱的密碼跋炕。
簡(jiǎn)潔版的執(zhí)行結(jié)果my_report_email_text.html作為郵件內(nèi)容HTML模板,全部執(zhí)行結(jié)果my_report.html作為郵件附件律适。
發(fā)送郵件后辐烂,就可以收到具體的測(cè)試質(zhì)量報(bào)告啦!
BSTestRunner?Github地址: