1. 数据驱动(用例 YAML)
所有接口都写成 YAML 用例,参数化方便维护:
- name: visitor_create
url: /v2/accounts/visitor_create
method: POST
headers:
content-type: application/json
body:
did: a1c0be99c215412a0c7a56eb7d6f3
source: api
platform: visitor
timestamp: 1755054392
channelId: 2800
channel: p
appId: 15687807
sign: a9de581c0b2f38adb586187184c68e
lang: zh-cn
validate_status: 200
validate_body:
code: 0
message: success
- name: get_user
url: /v2/user/get_user
method: POST
headers:
content-type: application/json
token: "$accessToken"
body:
channelId: 2800
game_id: 101
lang: zh-cn
validate_status: 200
validate_body:
code: 200
message: success
2. 动态参数替换(token、uid)
核心逻辑:执行用例时,把 accessToken 自动替换成 session 里的真实值。
# 替换 token/uid(headers、body、params)
for place_name, place in [("headers", headers), ("body", body), ("params", params)]:
for k, v in place.items():
if v == "$accessToken":
place[k] = session["token"]
elif v == "$uid":
place[k] = session["uid"]
3. 通用请求封装
所有请求都走同一个方法,只维护一份请求逻辑,支持 GET/POST/PUT/DELETE:
resp = requests.request(method, url, headers=headers, params=params, json=body)
resp.raise_for_status()
resp_json = resp.json()
4. 通用断言(允许多个成功码)
有的接口返回 0 成功,有的返回 200 成功,可以灵活适配不同接口返回的状态码:
if "code" in resp_json:
assert resp_json["code"] in (0, 200), f"断言失败: code={resp_json['code']}"
5. 报告集成(Allure)
每个请求、响应都挂到 Allure 报告里,报告里可以看到完整的请求/响应数据,定位问题更直观:
import allure
allure.dynamic.title(f"接口测试 - {case.get('name', case['url'])}")
allure.attach(str(body), name="请求Body", attachment_type=allure.attachment_type.JSON)
allure.attach(str(resp_json), name="响应Body", attachment_type=allure.attachment_type.JSON)