1. 程式人生 > 實用技巧 >pytest介面測試輕鬆入門

pytest介面測試輕鬆入門

通過Postman請求結果如下圖:


那我們怎麼用pytest進行測試呢?

在介面測試,我們要用到requests包,實現程式碼如下:

import pytest
import allure
import requests

class TestSimple(object):
    def TestWatcher(self):
        url = "http://wthrcdn.etouch.cn/weather_mini?city=成都"
       r = requests.get(url)
        assert r.status_code == 200
        d = r.json()
        print(d)

簡述:上面通過request實現了天氣的查詢,對其請求狀態做了驗證(如果HTTP狀態碼為200則認為測試通過),並對介面請求結果進行了列印。

執行上面程式碼時遇到問題:No tests were found


結果問題查詢:pytest 啟動檔名是以test開頭,函式名是以test開頭。所以我們把上面的函式名改下,把TestWacher改為testWacher再去執行,效果如下:


相比於狀態碼,我們可能更喜歡進行關鍵字校驗,如 查詢結果中沒有wendu欄位,則視為用例失敗怎麼實現?

此時可以使用pytest的xfail標記用例預期失敗,如果用例執行成功則顯示Xpassed,失敗則顯示xfailed。xfail標記並不會影響用例的執行。
新增程式碼如下:

if ('wendu' not in d['data'].keys()):
    pytest.xfail('返回結果不正確,wendu=NULL')

假設我們要檢查的欄位是 wendi,而結果中沒有該欄位,此時執行效果如下:


如果我們在執行時,如何讓報告顯得更漂亮呢?這時我們可以進行美化,最終程式碼如下:

@allure.feature("測試Dome")
class TestSimple(object):
    @allure.story("天氣查詢")
    @allure.description('一個免費的天氣查詢介面測試')
    @allure.severity('critical')
    def testWatcher(self):
        url = "http://wthrcdn.etouch.cn/weather_mini?city=成都"
        with allure.step("查詢天氣"):
            r = requests.get(url)
            assert r.status_code == 200
            d = r.json()
            print(d)
            if ('wendu' not in d['data'].keys()):
                pytest.xfail('返回結果不正確,wendu=NULL')

常見allure報告美化總結:

@allure.feature(“測試用例特性場景(主要功能模組)”)
@allure.story(“feature功能模組下的分支功能(用例名稱)”)
@allure.description(“這裡是用例的描述資訊”)
@allure.severity(“測試用例等級”)
說明:allure對用例的等級劃分成五個等級

  • blocker – 阻塞缺陷(功能未實現,無法下一步)
  • critical – 嚴重缺陷(功能點缺失)
  • normal – 一般缺陷(邊界情況,格式錯誤)
  • minor – 次要缺陷(介面錯誤與ui需求不符)
  • trivial – 輕微缺陷(必需項無提示,或者提示不規範)

allure.description_html(html程式碼) #提供一些HTML在測試用例的描述部分
@allure.step(“用例步驟說明”)
使用方法:
①@allure.step() 只能以裝飾器的形式放在類或者方法上面;
②with allure.step(): 可以放在測試用例方法裡面,但測試步驟的程式碼需要被該語句包含;
allure.attach(body, name, attachment_type, extension)
用於向測試報告中輸入一些附加的資訊,通常是一些測試資料資訊,引數說明:

  • body - 要寫入檔案的原始內容
  • name - 包含檔名的字串
  • attachment_type - 其中一個allure.attachment_type值,可以是文字、圖片、HTML等
  • extension - 提供的將用作建立檔案的副檔名

@allure.link(“URL=連結地址”)
@allure.issue(“URL=問題連結”)
@allure.testcase(“URL=用例連結”)

最後執行用例,並生成allure報告:


點選特性場景,進入詳情,結果如下:


上面就實現了一個簡單的pytest介面測試例子,但怎麼引數化,怎麼讓程式碼層次更清晰,要不要這麼low b?請關注小編後續文章。


另外,歡迎加入軟體測試技術交流群 313782132 ~進群可領取免費軟體測試資料以及群內測試大牛解惑!

測試工程師職業發展路線圖

功能測試 — 介面測試 — 自動化測試 — 測試開發 — 測試架構師

加油吧,測試人!如果你需要提升規劃,那就行動吧,在路上總比在起點觀望的要好。事必有法,然後有成。

資源不錯就給個推薦吧~