提取返回对象
提取response返回的对象数据,用extract关键字,通过content.key和content.int提取。httprunner里面的content实际上就是request里面的r.content,返回的是一个byte类型。
如果返回的json数据类型,用content.key取出对应的values:
{
"code":0,
"msg": "login success!",
"username": "test",
"token": "b3f7e8e12d23591ea671374dee818c63b1599d4d"
}
上面的json数据,可以转成python里面对应的dict类型,extract提取方法:
- content.code 取出code后面对应的值 0
- content.msg 取出msg后面的对应值“login success!”
- content.username 取出username后面的值"test"
- content.token 取出token值
如果返回的是list数据类型,用content.int方式取出对应下标的数据
[{
"age":18,
"name":"zhangsan"
},
{
"age":20,
"name":"lisi"
}]
对应的extract提取方法:
content.0 取出第一组数据{"age":18, "name":"zhangsan"}
content.0.name 取出第一组数据name的对应值 "zhangsan"
content对象的取值方式就2种:content.key和content.int
extract提取token参数并关联
前言
如何将上个接口的返回token,传给下个接口当做请求参数?这是工作中经常遇到的问题。
要解决这个问题很简单,我们只需要提取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了。
场景案例
我现在有一个登录接口A,登录成功后返回token,接口B查询用户信息,需要A接口返回的token才能访问。
A登录接口文档基本信息:
- 访问地址:http://127.0.0.1:9000/api/v1/login/
- 请求类型:POST
- 请求头部:application/json
- 请求参数:{“username”:“test”, “password”:“123456”}
B获取用户信息接口文档基本信息: - 访问地址:http://127.0.0.1:9000/api/v1/userinfo
- 请求类型:GET
- 请求头部:Content-Type: application/json
- 请求头部的token参数:Authorization: Token xxxxx
extract提取token
# yaml文件
extract:
- token: content.token
下个接口的用例引用token参数使用$token,用例参考如下:
# 登录的yaml文件
- config:
name: test API
request:
base_url: http://127.0.0.1:9000
- test:
name: 用户名密码正确登录成功
request:
url: /api/v1/login/
method: POST
headers:
Content-Type: application/json
json:
username: test
password: '123456'
extract:
- token: content.token
validate:
- eq: [status_code, 200]
- eq: [content.msg, 'login success!']
- test:
name: 查询用户信息
request:
url: /api/v1/userinfo
method: GET
headers:
Content-Type: application/json
Authorization: Token $token
validate:
- eq: [status_code, 200]
- eq: [content.msg, sucess!]
- eq: [content.data.0.mail, [email protected]]
- eq: [content.data.0.name, test]
查看report报告
token引用成功