接口自动化框架

60 阅读1分钟

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)

核心逻辑:执行用例时,把 uiduid、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)