?
概述
前面一章講解了單個接口的測試,但是實際項目中,因為權限和登錄狀態的限制,大部分接口沒辦法直接訪問到,這時候我們想訪問到一個系統的接口,就需要模擬用戶登錄拿到用戶的token和所擁有的權限之后再將這些信息作為參數傳遞給下游進行測試
舉個栗子:
base_url : 定義接口的基礎 URL。所有需要這個 URL 的測試函數都可以使用這個 fixture。
@pytest.fixture
def base_url():return "http://localhost:8081"
請求訪問登錄接口:
參數封裝:
@pytest.fixture
def login_payload():return {"username": "admin","password": "123","captcha": "12","uuid": "10f53b80-d83f-4431-8fb2-09280942522a"}
之后請求訪問登錄頁面
@pytest.fixture
def token(base_url, login_payload):response = requests.post(f"{base_url}/user/login", json=login_payload)assert response.status_code == 200data = response.json()assert data["code"] == "200"token = data["data"]["token"]return token
這樣我們就能拿到用戶的token信息
將用戶的請求頭信息按照系統存放的規則存入請求頭中
def test_course_page(base_url, token):headers = {"Token": token}params = {"pageNum": 1,"pageSize": 10,"name": "微表情","teacherName": "","courseModule": ""}response = requests.get(f"{base_url}/course/page", headers=headers, params=params)# 打印響應詳細信息print("Status Code:", response.status_code)print("Headers:", response.headers)print("Response Text:", response.text)# 斷言部分assert response.status_code == 200assert response.headers["Content-Type"] == "application/json"data = response.json()# 檢查響應中的具體字段assert data["code"] == "200"assert "msg" in dataassert "data" in datacourse_data = data["data"]assert "total" in course_dataassert "data" in course_dataassert len(course_data["data"]) > 0# 檢查第一個課程的具體字段first_course = course_data["data"][0]assert "id" in first_courseassert "name" in first_courseassert first_course["name"] == "微表情專業課"
全部代碼實例如下:
import requests
import pytest@pytest.fixture
def base_url():return "http://localhost:8081"@pytest.fixture
def login_payload():return {"username": "admin","password": "123","captcha": "12","uuid": "10f53b80-d83f-4431-8fb2-09280942522a"}@pytest.fixture
def token(base_url, login_payload):response = requests.post(f"{base_url}/user/login", json=login_payload)assert response.status_code == 200data = response.json()assert data["code"] == "200"token = data["data"]["token"]return tokendef test_course_page(base_url, token):headers = {"Token": token}params = {"pageNum": 1,"pageSize": 10,"name": "微表情","teacherName": "","courseModule": ""}response = requests.get(f"{base_url}/course/page", headers=headers, params=params)# 打印響應詳細信息print("Status Code:", response.status_code)print("Headers:", response.headers)print("Response Text:", response.text)# 斷言部分assert response.status_code == 200assert response.headers["Content-Type"] == "application/json"data = response.json()# 檢查響應中的具體字段assert data["code"] == "200"assert "msg" in dataassert "data" in datacourse_data = data["data"]assert "total" in course_dataassert "data" in course_dataassert len(course_data["data"]) > 0# 檢查第一個課程的具體字段first_course = course_data["data"][0]assert "id" in first_courseassert "name" in first_courseassert first_course["name"] == "微表情專業課"# 運行測試
if __name__ == "__main__":pytest.main(["-s", "test_course_page.py"])
運行結果:
更新參數,模擬登錄失敗的情況
類似的我們可以將參數改為可以動態錄入,可以將其定義為函數的參數,并通過函數調用傳遞不同的參數值。這樣可以使測試更加靈活,并且可以輕松地重復執行相同的測試用例以覆蓋不同的情況。
?