pytest 是(shi)一(yi)個成熟(shu)的(de)全功能 Python 測(ce)試框架(jia),它(ta)能幫助你編寫(xie)簡單(dan)的(de)小測(ce)試,也能支(zhi)持復雜的(de)功能測(ce)試。對于(yu)接口自動化測(ce)試,pytest 是(shi)一(yi)個非常(chang)強大的(de)工具,你可以結合 requests 這樣的(de) HTTP 客(ke)戶(hu)端(duan)庫來(lai)編寫(xie)接口測(ce)試。
下面是一個簡單的 pytest 接(jie)口自動化測試(shi)框(kuang)架(jia)的詳解:
1. 安裝必要的庫
首先,你需要(yao)安裝 pytest和 requests。
pip install pytest requests2. 編寫測試用例
在 Python 文件(jian)中(zhong),你可以(yi)編(bian)寫多(duo)個(ge)測(ce)試(shi)用(yong)例。每(mei)個(ge)測(ce)試(shi)用(yong)例是(shi)一(yi)個(ge)函數(shu),且必須以(yi) test_開頭,示例如(ru)下:
import requests  
import pytest  
# GET請求示例 
def test_get_request():  
    url = "url地址/api/v1/get"  
    response = requests.get(url)  
    assert response.status_code == 200  
    assert "success" in response.text  
  
# POST請求示例
def test_post_request():  
    url = "url地址/api/v1/post"  
    data = {"key": "value"}  
    response = requests.post(url, json=data)  
    assert response.status_code == 200  
    # 其他斷言...3. 使用 fixtures
pytest 的(de) fixtures 是一個非常強大(da)的(de)功能,可通過 fixtures 設置一些測試前后的(de)準備工作(zuo),比如設置請求頭、設置認證信息等。
import pytest  
import requests  
  
@pytest.fixture  
def setup_headers():  
    headers = {  
        "Content-Type": "application/json",  
        "Authorization": "tokenxxx"  
    }  
    return headers  
  
def test_get_request(setup_request):  
    url = "url地址/api/v1/get"  
    response = requests.get(url, headers=setup_headers)  
    assert response.status_code == 2004. 參數化測試
有時你可(ke)能想(xiang)對同一個接口使用(yong)不同的參(can)(can)數進行測試(shi),pytest 的 pytest.mark.parametrize 可(ke)以幫助(zhu)你實(shi)現參(can)(can)數化(hua)測試(shi)。
import pytest  
import requests  
  
# 參數化示例
@pytest.mark.parametrize("param1, param2, expected_status", [  
    ("val1", "val2", 200),  
    ("val3", "val4", 400),  
])  
def test_post_request(param1, param2, expected_status):  
    url = "url地址/api/v1/post"  
    data = {"key1": param1, "key2": param2}  
    response = requests.post(url, json=data)  
    assert response.status_code == expected_status5. 運行測試
在命令行中(zhong),你可(ke)以(yi)使用(yong) pytest 命令來運(yun)行測(ce)試(shi)
pytest your_test_file.py6. 插件和擴展
pytest 有(you)一個龐大的插(cha)件生(sheng)態系統,你可以使用這(zhe)些(xie)插(cha)件來擴展 pytest 的功能(neng),比如(ru)生(sheng)成(cheng)測試報(bao)告、集(ji)成(cheng)到 CI/CD 系統中(zhong)等。
7. 組織和結構
對于大型項目,你可能需要更好地組織你的測試用例和 fixtures。你可以將它們放在不同的文件和目錄中,并使用 pytest 的配置文件(pytest.ini 或 pyproject.toml)來(lai)配(pei)置測(ce)試(shi)的運(yun)行方式(shi)。
總結
pytest 是一個(ge)強(qiang)大且(qie)靈活的測(ce)(ce)試(shi)框架,結(jie)合 requests 這樣(yang)的庫,可以很容易地構(gou)建出(chu)(chu)接(jie)口自動(dong)化(hua)測(ce)(ce)試(shi)框架。通過合理使用 fixtures、參數化(hua)測(ce)(ce)試(shi)和(he)其(qi)他功能,可以寫出(chu)(chu)高(gao)效且(qie)可維護的測(ce)(ce)試(shi)代碼。