從CSV文件讀取測(cè)試用例,實(shí)現(xiàn)接口自動(dòng)化測(cè)試

前言

隨著項(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地址:

https://github.com/easonhan007/HTMLTestRunner

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捂贿,一起剝皮案震驚了整個(gè)濱河市纠修,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厂僧,老刑警劉巖扣草,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颜屠,居然都是意外死亡辰妙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門甫窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)密浑,“玉大人,你說(shuō)我怎么就攤上這事粗井《疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵浇衬,是天一觀的道長(zhǎng)懒构。 經(jīng)常有香客問(wèn)我,道長(zhǎng)径玖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任颤介,我火速辦了婚禮梳星,結(jié)果婚禮上赞赖,老公的妹妹穿的比我還像新娘。我一直安慰自己冤灾,他們只是感情好前域,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著韵吨,像睡著了一般匿垄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上归粉,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天椿疗,我揣著相機(jī)與錄音,去河邊找鬼糠悼。 笑死届榄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倔喂。 我是一名探鬼主播铝条,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼席噩!你這毒婦竟也來(lái)了班缰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悼枢,失蹤者是張志新(化名)和其女友劉穎埠忘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體萧芙,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡给梅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了双揪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片动羽。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渔期,靈堂內(nèi)的尸體忽然破棺而出运吓,到底是詐尸還是另有隱情,我是刑警寧澤疯趟,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布拘哨,位于F島的核電站,受9級(jí)特大地震影響信峻,放射性物質(zhì)發(fā)生泄漏倦青。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一盹舞、第九天 我趴在偏房一處隱蔽的房頂上張望产镐。 院中可真熱鬧隘庄,春花似錦、人聲如沸癣亚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)述雾。三九已至街州,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玻孟,已是汗流浹背唆缴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留取募,地道東北人琐谤。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像玩敏,于是被迫代替她去往敵國(guó)和親斗忌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容