轉:https://www.cnblogs.com/yoyoketang/p/11565464.html
前言
如何將上個接口的返回token,傳給下個接口當做請求參數?這是最常見的一個問題了。
解決這個問題其實很簡單,我們只需取出token值,設置為一個中間變量a,下個接口傳這個變量a就可以了。那么接下來就是解決兩個問題:
- 如何取出token值?
- 如何參數關聯?
httprunner==1.5.8
場景案例
我現在有一個登陸接口A,登陸成功后返回一個token值。有一個獲取綁定卡號的接口B,但是接口B必須要先登錄后傳登錄的token才能訪問
A接口登錄接口文檔基本信息
- 訪問地址:http://127.0.0.1:8000/api/v1/login/
- 請求類型:POST
- 請求頭部:application/json
- 請求參數:{"username":"test", "password":"123456"}
B接口獲取綁定卡號的接口文檔基本信息
- 訪問地址:http://127.0.0.1:8000/api/v1/user/info/
- 請求類型:GET
- 請求頭部:Content-Type: application/json
- 請求頭部token參數: Authorization: Token xxxxx login token xxxxx
先不帶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引用成功了