第5章 参数关联与登录鉴权实战
本章目标
掌握"多变量提取 + 跨接口复用 + 鉴权注入"完整链路,让需要登录态和业务关联数据的接口都能自动化执行。
1. 先理解参数关联
接口自动化最常见需求:
先登录拿 token,再把 token 给后续接口使用。
进阶场景还包括:
- 下单接口返回
orderNo,给"查询订单详情"接口使用 - 创建用户返回
userId,给"查询/编辑/删除用户"接口使用 - 课程创建返回
courseId,给"上下架/删除课程"接口使用
2. 参数关联语法(先记住这 2 条)
前置接口提取:
yaml
extract:
变量名: "响应JSON路径"
后续接口引用:
yaml
${变量名}
本框架中可引用的位置:
headersparamsdatajson
3. 实战一:登录接口提取 token
yaml
- project: "演示项目"
module: "登录模块"
api_name: "登录接口"
title: "登录成功-提取token和user_id"
base_url_key: "admin_url"
request:
method: "POST"
url: "/api/login"
json:
username: "test"
password: "123456"
extract:
auth_token: "data.token"
user_id: "data.userId"
validate:
- eq: ["status_code", 200]
- eq: ["json.code", 0]
执行后,提取值会落入 config/extract.yaml。
4. 实战二:后续接口复用 token 与 user_id
4.1 方式一:自动鉴权(推荐)
yaml
request:
method: "POST"
url: "/api/order/list"
need_auth: true
json:
userId: "${user_id}"
说明:need_auth: true 会自动把 auth_token 注入请求头(auth / Authorization)。
4.2 方式二:手动 header 引用
yaml
request:
method: "GET"
url: "/api/user/info"
params:
userId: "${user_id}"
headers:
Authorization: "Bearer ${auth_token}"
5. 实战三:业务 ID 串联(下单 -> 查询详情)
5.1 下单接口提取 order_no
yaml
- project: "演示项目"
module: "订单模块"
api_name: "创建订单"
title: "创建订单并提取order_no"
base_url_key: "sale_admin_url"
request:
method: "POST"
url: "/api/order/create"
need_auth: true
json:
userId: "${user_id}"
productId: 1001
count: 1
extract:
order_no: "data.orderNo"
validate:
- eq: ["status_code", 200]
- eq: ["json.code", 0]
5.2 订单详情接口复用 order_no
yaml
- project: "演示项目"
module: "订单模块"
api_name: "订单详情"
title: "通过order_no查询详情"
base_url_key: "sale_admin_url"
request:
method: "GET"
url: "/api/order/detail"
need_auth: true
params:
orderNo: "${order_no}"
validate:
- eq: ["status_code", 200]
- eq: ["json.code", 0]
6. 为什么每次执行前要清空 extract
conftest.py 会在会话开始时清理历史提取值,避免旧 token 污染新执行结果。
7. 常见失败原因与排查顺序
- 登录接口先后顺序不对(登录文件名未排前)
- extract 表达式错误,没取到 token
- token 过期,环境数据变更
- 变量名写错(提取是
order_no,引用写成${orderNo})
推荐排查顺序:
- 看
logs/是否有"提取变量"日志 - 看
config/extract.yaml是否已写入变量 - 看后续请求日志中变量是否已替换成真实值
- 再检查断言和业务数据
本章验收标准
- 你能完成"登录提取 token/user_id -> 下单提取 order_no -> 订单详情复用"的链路
- 你能区分自动鉴权(
need_auth: true)与手动 header 引用两种方式 - 能解释
extract.yaml在整条链路中的作用