pytest+allure接口自動化測試

前言

當(dāng)前項(xiàng)目所使用的接口自動化,用的是之前寫的unittest+ddt的哩俭。偶爾上BOSS看了一些招聘消息蒸殿,就花了點(diǎn)時間學(xué)習(xí)pytest宾毒,然后寫了這個接口自動化:pytest+allure。


思路

1盆犁、主體思路

  • 采用數(shù)據(jù)驅(qū)動:yaml文件管理測試用例命咐,一個yaml文件最好對標(biāo)一個接口,然后有不同情況的請求/判斷數(shù)據(jù)
  • 請求需要處理數(shù)據(jù)依賴的情況蚣抗,因?yàn)橛昧藃equests.session()進(jìn)行會話保持侈百,所以排除cookies的依賴。需要處理的是其它參數(shù)的依賴翰铡,比如:支付請求的參數(shù)訂單號的值钝域,來自于確認(rèn)訂單的響應(yīng)參數(shù)訂單號的值。
    • 解決方案:
      1.依賴數(shù)據(jù)變量開頭用$標(biāo)記锭魔,比如$orderid(一個請求中例证,不能出現(xiàn)多個同名依賴數(shù)據(jù)變量)
      2.需要指定提取該變量的測試用例
      3.需要指定需要提取的變量名,比如:
 variables:  # 需要獲取的變量值(本用例需要)
     - login: # 提取變量的測試用例
       - code_value
       - data_value  # 變量名

4.對應(yīng)的測試用例迷捧,需要指定要提取的變量织咧,以及值在response的位置,比如:

relevance: # 提取出去的變量(提供其它用例)
  code_value: content.data.code  # 變量名: 變量位置
  data_value: content.data  

ps.variables指定的變量名需要和relevance中指定的變量一致漠秋,就比如上面笙蒙,從login提取code_value和data_value,那么login.yaml提供該數(shù)據(jù)的請求中庆锦,relevance也需要指定code_value和data_value(暫時沒處理如果有多個相同的情況捅位,默認(rèn)取一個)

  • 測試用例的數(shù)據(jù),通過@pytest.mark.parametrize("param, title", test_params)傳遞
    param:每次請求的內(nèi)容
    title:該請求的標(biāo)題

2搂抒、難點(diǎn):

難點(diǎn)1:處理依賴數(shù)據(jù)艇搀;還是用上面的例子:支付請求的參數(shù)訂單號的值,來自于確認(rèn)訂單的響應(yīng)參數(shù)訂單號的值求晶。

1.在“支付請求”測試用例pay.yaml中焰雕,比如url上需要帶上orderid,寫成:http://www.xxx.com?orderid=$orderid
2.然后說明該參數(shù)值需要去“確認(rèn)訂單”測試用例order.yaml中去獲取芳杏,所以用例pay.yaml中寫上:

 variables:  
     - order:
        - orderid

3.比如orderid需要取自一個正確下單的請求用例矩屁,那么就在“確認(rèn)訂單”測試用例order.yaml該請求用例中辟宗,寫上:

relevance: # 提取出去的變量(提供其它用例)
  orderid: content.data.orderid # 變量名: 變量位置

邏輯解釋:
1:處理yaml數(shù)據(jù)時,發(fā)現(xiàn)一個接口請求數(shù)據(jù)中有$開頭的數(shù)據(jù)档插,則添加到一個list中慢蜓,然后該list值會以dict{variables_data:[orderid]}的形式,組裝在這個接口請求數(shù)據(jù)中(非全局)
2:同時郭膛,如果發(fā)現(xiàn)一個接口請求有步驟2的結(jié)構(gòu)晨抡,則會處理成這樣:variables: [{'login': ['orderid']}, {'xxx': ['xxx','xxx']}]
當(dāng)發(fā)現(xiàn)一個接口請求數(shù)據(jù),同時有variables_datavariables這兩個值则剃,那說明這個接口需要其它用例提供依賴數(shù)據(jù)值
3:根據(jù)variables: [{'login': ['orderid']}, {'xxx': ['xxx','xxx']}]耘柱,找到login.yaml這個測試用例文件,然后讀取該文件內(nèi)容和進(jìn)行判斷棍现,看哪個用例中存在relevance: {'orderid': 'content.data.orderid'}调煎,說明所想要獲取的orderid的值,取自于這個用例請求response的content.data.orderid己肮。那么就會發(fā)送這個請求士袄,在響應(yīng)中取值response.content.data.orderid。比如說如果orderid=10
4:接著把這個值谎僻,替換到http://www.xxx.com?orderid=$orderid中娄柳,也就是http://www.xxx.com?orderid=10。然后發(fā)送該請求

難點(diǎn)2:把yaml用例數(shù)據(jù)艘绍,解析成適用@pytest.mark.parametrize()的數(shù)據(jù)格式

@pytest.mark.parametrize("param1, param2", params)赤拒,其中的params所需的數(shù)據(jù)結(jié)構(gòu)需可迭代,比如[ [param1_1, param2_1], [param1_2, param2_2]... ]诱鞠。那么每次獲取傳遞來的就是里面的[param1_x, param2_x]
yaml讀取的結(jié)構(gòu)挎挖,自行百度;然后詳細(xì)代碼邏輯就不說明了航夺。


代碼目錄結(jié)構(gòu)

Pytest接口自動化目錄結(jié)構(gòu)

大體業(yè)務(wù)邏輯

大體業(yè)務(wù)邏輯圖

git(求Star)

https://github.com/LinZLin/API_Pytest

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕉朵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阳掐,更是在濱河造成了極大的恐慌墓造,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锚烦,死亡現(xiàn)場離奇詭異,居然都是意外死亡帝雇,警方通過查閱死者的電腦和手機(jī)涮俄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尸闸,“玉大人彻亲,你說我怎么就攤上這事孕锄。” “怎么了苞尝?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵畸肆,是天一觀的道長。 經(jīng)常有香客問我宙址,道長轴脐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任抡砂,我火速辦了婚禮大咱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘注益。我一直安慰自己碴巾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布丑搔。 她就那樣靜靜地躺著厦瓢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啤月。 梳的紋絲不亂的頭發(fā)上煮仇,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音顽冶,去河邊找鬼欺抗。 笑死,一個胖子當(dāng)著我的面吹牛强重,可吹牛的內(nèi)容都是我干的绞呈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼间景,長吁一口氣:“原來是場噩夢啊……” “哼佃声!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倘要,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤圾亏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后封拧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體志鹃,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年泽西,在試婚紗的時候發(fā)現(xiàn)自己被綠了曹铃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡捧杉,死狀恐怖陕见,靈堂內(nèi)的尸體忽然破棺而出秘血,到底是詐尸還是另有隱情,我是刑警寧澤评甜,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布灰粮,位于F島的核電站,受9級特大地震影響忍坷,放射性物質(zhì)發(fā)生泄漏粘舟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一承匣、第九天 我趴在偏房一處隱蔽的房頂上張望蓖乘。 院中可真熱鬧,春花似錦韧骗、人聲如沸嘉抒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽些侍。三九已至,卻和暖如春政模,著一層夾襖步出監(jiān)牢的瞬間岗宣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工淋样, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耗式,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓趁猴,卻偏偏與公主長得像刊咳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子儡司,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345