httprunner接口间参数依赖处理方式——extract+content.参数名
场景一:一些接口请求需要身份认证成功之后才能获取到数据
场景二:依赖上游接口的返回参作为下一个接口参数
示例接口:
getSchoolList----获取用户的所有学校列表
postman:直接调用getSchoolList接口,接口响应:没有token
在请求头里将登录成功返回的token放在cookie里,再次请求,身份鉴权成功,接口返回数据
ps:本次实践还是遵循api-testcase-testsuite分层,进行脚本编写
1、创建一个.env文件(引入概念:.env文件为全局默认配置文件)
先配置一下参数
# 域名地址
BASE_URL = http://xxx.xxx.com
# 登录账号+密码
MOBILE = 1782683xxxx
PASSWORD = 69f600a1be1d7aa6318ea5b274c09ae6
2、在api文件下,完善login_test.yml脚本,引用.env文件里的配置变量:${ENV(变量名)}
name: login_api
base_url: ${ENV(BASE_URL)}
# 公共变量
variables:
account: ${ENV(MOBILE)}
password: ${ENV(PASSWORD)}
status: 200
request:
headers:
Content-Type: "application/json;charset=UTF-8"
User-Agent:
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30
(KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 Edg/92.0.4515.159"
json:
account: $account
password: $password
method: POST
url: /nbugs-auth-center-test/xyhauth/checkPwd
validate:
- eq:
- status_code
- 200
- eq:
- body.code
- 200
3、在api文件下,新增getSchoolList.yml脚本,引用.env文件里的配置变量:${ENV(变量名)}
Cookie: nbugs=$token
name: getSchoolList
base_url: ${ENV(BASE_URL)}
request:
headers:
Content-Type: application/json;charset=UTF-8
Cookie: nbugs=$token
# get请求,用params接收参数
params:
moblie = ${ENV(MOBILE)}
method: GET
url: /nbugs-auth-center-test/xyhauth/getSchoolList
validate:
- eq:
- status_code
- 200
- eq:
- body.code
- 200
4、在testcases文件下,新增test_case_getschoollist.yml脚本
引入关键字概念:extract
登录后提取响应结果里的token,用关键字extract,然后通过content.参数名
以下响应结果为登录成功返回的,要提取data里面的值,用content.data
{
"code": 200,
"msg": "success",
"data": "5149750101f314083aeecbd27b7cfa277",
"success": true,
"requestId": "286b30a0-4379-11ec-883d-6f05a975e30c"
}
脚本内容:
config:
name: getshcoollist
teststeps:
-
name: 正常登录
api: "test_httprunner/api/login_test.yml"
extract:
token: content.data
-
name: 获取学校列表
api: "test_httprunner/api/getSchoolList.yml"
validate:
- eq:
- status_code
- 200
- eq:
- body.code
- 200
5、在testsuites文件下,新增test_suite_getschoollist.yml脚本
config:
name: 获取学校列表
testcases:
-
name: 获取学校列表
testcase: testcasestest_case_getschoollist.yml