基于pytest與postman的數(shù)據(jù)自動(dòng)采集接口自動(dòng)化測(cè)試實(shí)踐

本文已被51測(cè)試網(wǎng)收錄:https://mp.weixin.qq.com/s/ikex_lNScqw8yzSTG--uvw

一、 前言

本文跟大家介紹的是基于python測(cè)試框架pytest 與postman數(shù)據(jù)自動(dòng)采集的接口自動(dòng)化測(cè)試實(shí)踐方案,首先了解下為什么是基于pytest框架而不是使用unitest?網(wǎng)上的對(duì)比資料很多,概括起來(lái)就是pytest 相較于 unittest 代碼更加的簡(jiǎn)潔和靈活,最為跳躍的一點(diǎn)就是 fixture 機(jī)制,并且pytest有很多的第三方插件可以擴(kuò)展和繼承,大家可以深入去查一查。
第二個(gè)了解的是為什么要做數(shù)據(jù)自動(dòng)采集,做數(shù)據(jù)驅(qū)動(dòng)很多教程推薦的是將數(shù)據(jù)寫在excel中,然后通過(guò)程序去讀取。但我更推薦的是通過(guò)軟件自動(dòng)采集所需數(shù)據(jù),這樣可以大大節(jié)省手動(dòng)在excel錄入數(shù)據(jù)的時(shí)間。推薦使用postman采集數(shù)據(jù),它是一款做開(kāi)發(fā)人手必備的接口調(diào)試工具,幾乎能發(fā)送所有類型的HTPP請(qǐng)求,在打開(kāi)代理模式以后能夠自動(dòng)抓取pc端瀏覽器或者APP端請(qǐng)求的接口數(shù)據(jù),存儲(chǔ)并導(dǎo)出后為json格式的數(shù)據(jù)源,簡(jiǎn)單方便。

二、 自動(dòng)化框架流程

整個(gè)代碼框架除了數(shù)據(jù)來(lái)源從postman采集,其他所有封裝的公共庫(kù)以及具體的測(cè)試用例均使用代碼編輯器如pycharm編寫python代碼,其中需要用到的pytest、requests、allure等庫(kù)可以直接使用pip命令安裝。從數(shù)據(jù)采集到完成自動(dòng)化測(cè)試并輸出測(cè)試報(bào)告的流程如下圖:


image.png

1) 編寫公共庫(kù):如果某個(gè)函數(shù)需要被多次引用,那么就可以封裝成公共函數(shù),這些封裝的函數(shù)主要有:斷言、全局常量、log日志、發(fā)送請(qǐng)求、用戶session、加密等。跟業(yè)務(wù)無(wú)關(guān),可以先封裝好。


image.png

2) 編寫配置文件:配置文件內(nèi)容如環(huán)境參數(shù)、文件存儲(chǔ)路徑、版本號(hào),以及配置文件的讀寫封裝等,也是編寫測(cè)試用例之前必須封裝好的內(nèi)容。


image.png

3) 數(shù)據(jù)自動(dòng)采集:如下圖所示,打開(kāi)代理模式,設(shè)置代理端口如:5555,設(shè)置抓包的存儲(chǔ)路徑,比如一個(gè)功能流程就可以單獨(dú)存一個(gè)集合,最后設(shè)置過(guò)濾地址為本系統(tǒng),以免抓到與系統(tǒng)無(wú)關(guān)的接口 。


image.png

4) 數(shù)據(jù)導(dǎo)出json文件存儲(chǔ):選中某個(gè)集合后,右鍵選擇export導(dǎo)出,選擇第一個(gè)json數(shù)據(jù)格式。導(dǎo)出的數(shù)據(jù)源放入項(xiàng)目對(duì)應(yīng)的目錄Params->json下


image.png

5) 編寫數(shù)據(jù)讀取函數(shù):編寫jsonparam.py函數(shù),解析postman格式的json數(shù)據(jù)。因?yàn)閜ostman有些數(shù)據(jù)不是我們需要的 有些需要拼接,所以需要單獨(dú)封裝一個(gè)轉(zhuǎn)換格式的函數(shù),方便測(cè)試用例數(shù)據(jù)讀取使用。


image.png

6) 編寫測(cè)試用例:在Testcase下編寫測(cè)試用例的前置和后置參數(shù)文件conftest.py文件(此文件名為是固定的,不能寫別的)。


image.png

編寫具體的測(cè)試用例,測(cè)試用例均要使用test開(kāi)頭或結(jié)尾(否則框架無(wú)法識(shí)別)


image.png

7) 運(yùn)行測(cè)試用例:如果需要運(yùn)行Testcase下所有測(cè)試用例,可以在根目錄建run.py文件,若只需要單獨(dú)運(yùn)行某個(gè)功能的測(cè)試用例,也可以在具體的測(cè)試文件的main函數(shù)里面使用pytest.main("test_xxx.py")命令運(yùn)行。


image.png

8) 輸出日志文件:過(guò)程中使用self.log.info('請(qǐng)求參數(shù):%s' % data)打印日志信息,作為記錄和調(diào)試使用。


image.png

9) 輸出測(cè)試報(bào)告:最后可以集成allure插件,輸出更加直觀漂亮的測(cè)試報(bào)告。集成過(guò)程網(wǎng)上也有很多教程,但是坑非常多,大家需要注意以下內(nèi)容:
1.建議使用 pytest 3.8.0 版本
命令:pip install pytest
注意:勿使用pytest過(guò)高版本,且勿使用allure-pytest插件,會(huì)一直報(bào)錯(cuò)pytest找不到allure錯(cuò)誤,網(wǎng)上的辦法也解決不了,親測(cè)使用 pytest 3.8.0 搭配 pytest-allure-adaptor 1.7.10 可以解決
2.建議使用 pytest-allure-adaptor 1.7.10 版本
命令:pip install pytest-allure-adaptor
3.需要安裝jdk 1.8以上版本
4.需要安裝 allure-commandline(先安裝npm包)
命令:npm install -g allure-commandline --save-dev

接下來(lái)按照在run.py文件中寫的代碼
5.pytest命令基礎(chǔ)上加--alluredir,生成xml報(bào)告。
pytest -s -q --alluredir [xml_report_path]
6.使用 Command Tool 來(lái)生成我們需要的美觀報(bào)告。
allure generate [xml_report_path] -o [html_report_path]
7.直接用chrome瀏覽器打開(kāi)報(bào)告,報(bào)告會(huì)是空白頁(yè)面
解決辦法:在pycharm中右擊index.html選擇打開(kāi)方式Open in Browser即可

image.png

三、 代碼結(jié)構(gòu)&源碼

image.png

框架代碼分為如下幾個(gè)模塊:Common公共庫(kù)、Conf配置庫(kù)、Log封裝日志、Params數(shù)據(jù)源和讀取數(shù)據(jù)、Report測(cè)試報(bào)告、TestCase測(cè)試用例、run.py執(zhí)行文件,幾個(gè)重要的函數(shù)如下,其他代碼已經(jīng)放到開(kāi)源github上,大家自行下載。
源碼地址:https://github.com/kayie77/PyTestApiAuto

  1. Common->Assert.py 封裝斷言
    直接使用python的assert斷言函數(shù),用于判斷一個(gè)表達(dá)式,使用方式:
    assert test.assert_code(response['code'], 200)


    image.png
  1. Common->Request.py 封裝請(qǐng)求
    目的是封裝公共請(qǐng)求參數(shù)和封裝返回內(nèi)容


    image.png
  1. Conf->Config.py 讀取配置文件
    在config.ini定義好文件內(nèi)容,需要再寫一個(gè)讀寫配置文件的函數(shù)


    image.png
  1. Params->jsonparams.py 讀取數(shù)據(jù)源
    Jsonparams的作用是從Postman導(dǎo)出的json數(shù)據(jù)源中截取所需要的數(shù)據(jù),如header、url、body等參數(shù),拼接成requests請(qǐng)求需要的格式返回。


    image.png
image.png
  1. TestCase->test_xxx.py 測(cè)試用例
    @allure.story 用于定義被測(cè)功能的用戶場(chǎng)景,即子功能點(diǎn)
    @pytest.mark.parametrize傳多個(gè)參數(shù),實(shí)現(xiàn)執(zhí)行不同數(shù)據(jù)
    從數(shù)據(jù)源獲取數(shù)據(jù)后發(fā)起請(qǐng)求,斷言結(jié)果,設(shè)置下一接口所需的變量參數(shù)


    image.png
  1. run.py 執(zhí)行文件
    獲取報(bào)告輸出位置;定義好需要運(yùn)行哪些測(cè)試集,如果需要全部運(yùn)行,則不需要定義,會(huì)自動(dòng)找到Test開(kāi)頭(結(jié)尾)的包下面test開(kāi)頭(結(jié)尾)的py文件;使用pytest.main(args)執(zhí)行測(cè)試用例,定義好allure報(bào)告所需參數(shù),使用shell命令生成allure報(bào)告


    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 176,463評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,009評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,218評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,436評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,659評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,917評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評(píng)論 2 374