httprunner学习3-extract提取token值参数关联(上个接口返回的token,传给下个接口请求参数)


转:https://www.cnblogs.com/yoyoketang/p/11565464.html

前言

如何将上个接口的返回token,传给下个接口当做请求参数?这是最常见的一个问题了。
解决这个问题其实很简单,我们只需取出token值,设置为一个中间变量a,下个接口传这个变量a就可以了。那么接下来就是解决两个问题:

  • 如何取出token值?
  • 如何参数关联?
    httprunner==1.5.8

场景案例

我现在有一个登陆接口A,登陆成功后返回一个token值。有一个获取绑定卡号的接口B,但是接口B必须要先登录后传登录的token才能访问
A接口登录接口文档基本信息

B接口获取绑定卡号的接口文档基本信息

先不带token去访问接口B,使用命令行工具httpie测试接口

C:\Users\dell>http http://127.0.0.1:8000/api/v1/user/info/ HTTP/1.1 401 Unauthorized Allow: GET, POST, HEAD, OPTIONS Content-Length: 58 Content-Type: application/json Date: Sat, 21 Sep 2019 14:06:15 GMT Server: WSGIServer/0.2 CPython/3.6.0 Vary: Accept WWW-Authenticate: Token X-Frame-Options: SAMEORIGIN { "detail": "Authentication credentials were not provided." } 

不带token会提示没权限访问:401 Unauthorized

接口测试

先使用接口测试工具测试下,用postman,或者fiddler都可以,我这里为了查看报文信息方便,用httpie命令行工具

先访问接口A获取token值234af73571da46ade79ea6a74961b1d23d609b79

D:\>http http://127.0.0.1:8000/api/v1/login/ username=test password=123456 -v POST /api/v1/login/ HTTP/1.1 Accept: application/json, */* Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 42 Content-Type: application/json Host: 127.0.0.1:8000 User-Agent: HTTPie/1.0.3 { "password": "123456", "username": "test" } HTTP/1.1 200 OK Allow: POST, OPTIONS Content-Length: 109 Content-Type: application/json Date: Sat, 21 Sep 2019 15:37:06 GMT Server: WSGIServer/0.2 CPython/3.6.0 Vary: Accept, Cookie X-Frame-Options: SAMEORIGIN { "code": 0, "msg": "login success!", "token": "234af73571da46ade79ea6a74961b1d23d609b79", "username": "test" } 

传给下个接口B

D:\>http http://127.0.0.1:8000/api/v1/user/info/ Authorization:"Token b7e02c959fbae4c2a0d9094f6f9b9a35fa8aaa1e" -v GET /api/v1/user/info/ HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Authorization: Token b7e02c959fbae4c2a0d9094f6f9b9a35fa8aaa1e Connection: keep-alive Host: 127.0.0.1:8000 User-Agent: HTTPie/1.0.3 HTTP/1.1 200 OK Allow: GET, POST, HEAD, OPTIONS Content-Length: 96 Content-Type: application/json Date: Sat, 21 Sep 2019 16:04:25 GMT Server: WSGIServer/0.2 CPython/3.6.0 Vary: Accept X-Frame-Options: SAMEORIGIN [ { "age": 20, "create_time": "2019-09-15", "id": 1, "mail": "283340479@qq.com", "name": "yoyo", "sex": "M" } ] 

传头部参数用xx:xxxx格式,中间用冒号:,如:User-Agent:demo-agent/1.0 'Cookie:a=b;b=c',由于Authorization参数中间有空格,用双引号包起来

extract提取token

提取登录接口返回的token值,使用extract提取器

    extract: - token: content.token 

下个接口的用例引用token参数使用$token,完整的用例test_info.yml如下

# 上海悠悠,QQ交流群:750815713 - config:  name: logincase  variables: {} - test:  name: login case1  request:  url: http://127.0.0.1:8000/api/v1/login/  method: POST  headers:  Content-Type: application/json  User-Agent: python-requests/2.18.4  json:  username: test  password: 123456  extract:  - token: content.token # 提取token  validate:  - eq: [status_code, 200]  - eq: [headers.Content-Type, application/json]  - eq: [content.msg, login success!]  - eq: [content.code, 0] # 上海悠悠,QQ交流群:750815713 - test:  name: get user info case1  request:  url: http://127.0.0.1:8000/api/v1/user/info/  method: GET  headers:  Content-Type: application/json  User-Agent: python-requests/2.18.4  Authorization: Token $token # 引用token  validate:  - eq: [status_code, 200]  - eq: [headers.Content-Type, application/json]  - eq: [content.0.age, 20]  - eq: [content.0.name, yoyo]  - eq: [content.0.mail, 283340479@qq.com] 

运行用例

hrun test_info.yml

D:\soft\untitled>hrun test_info.yml login case1 INFO POST http://127.0.0.1:8000/api/v1/login/ INFO status_code: 200, response_time(ms): 516.0 ms, response_length: 109 bytes INFO start to extract from response object. INFO start to validate. . get user info case1 INFO GET http://127.0.0.1:8000/api/v1/user/info/ INFO status_code: 200, response_time(ms): 188.8 ms, response_length: 96 bytes INFO start to validate. . ---------------------------------------------------------------------- Ran 2 tests in 0.713s OK INFO Start to render Html report ... INFO Generated Html report: D:\soft\untitled\reports\1569079832.html 

查看report报告

打开report目录下生成的报告文件

打开报告详情,可以看到token引用成功了


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM