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

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了httprunner学习3-extract提取token值参数关联(上个接口返回的token,传给下个接口请求参数)相关的知识,希望对你有一定的参考价值。

前言

如何将上个接口的返回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引用成功了


httprunner 2.x实战教程点我 ->立即报名

以上是关于httprunner学习3-extract提取token值参数关联(上个接口返回的token,传给下个接口请求参数)的主要内容,如果未能解决你的问题,请参考以下文章

httprunner学习7-extract提取content返回对象

httprunner学习21-正则表达式提取(extract)与校验(validate)

httprunner 2.x学习14-jsonpath提取(解决:ResponseObject does not have attribute: parsed_body)

03-Httprunner-JMESPath提取返回结果

httprunner 3.x学习20 - jmespath取值特殊字符问题解决

接口自动化框架httprunner--设置接口关联