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

前言

提取response返回的对象数据,用extract关键字。前面有关于token的取值,通过content.token取值。
本篇详细讲解如何从返回的json数据提取出想要的各种数据

content对象

httprunner里面的content实际上就是request里面的r.content,返回的是一个byte类型。

比如返回的json数据如下

{
    "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后面的值"b3f7e8e12d23591ea671374dee818c63b1599d4d"

list类型取值

如果返回的json数据,转化成python里面的list对象,如下结构

[{
        "age": 20,
        "create_time": "2019-09-15",
        "id": 1,
        "mail": "283340479@qq.com",
        "name": "yoyo",
        "sex": "M"
    },
    {
        "age": 21,
        "create_time": "2019-09-16",
        "id": 2,
        "mail": "123445@qq.com",
        "name": "yoyo111",
        "sex": "M"
    }
]

上面这种转化成python里面的list对象,可以用content.int 方法取出对应下标的数据,对应的extract提取方法

  • content.0 取出list里面的第一组数据{"age": 20, "create_time": "2019-09-15", "id": 1, "mail": "283340479@qq.com", "name": "yoyo", "sex": "M"}
  • content.1 取出list里面的第二组数据{"age": 21, "create_time": "2019-09-16", "id": 2, "mail": "123445@qq.com", "name": "yoyo111", "sex": "M"}
  • content.0.name 取出第一组数据的name对应值"yoyo"
  • content.1.name 取出第二组数据的name对应的值"yoyo111"
  • content.0.mail 取出第一组数据的mail对应值"283340479@qq.com"

通过content.int的方法也可以取出字符串里面的值,比如我要取出第一组数据,name对应值"yoyo"里面的第三个字符,就可以用content.0.name.2,这种取字符串的一般很少用

实践案例

总的来说,content对象的取值就2种方式:content.keycontent.int,按层级一层的去查找就可以了

这里有个demo案例,使用httpie请求后的响应结果如下

C:\Users\dell>http http://127.0.0.1:8000/api/test/demo
HTTP/1.1 200 OK
Content-Length: 255
Content-Type: application/json
Date: Sun, 22 Sep 2019 10:11:07 GMT
Server: WSGIServer/0.2 CPython/3.6.0
X-Frame-Options: SAMEORIGIN

{
    "code": 0,
    "datas": [
        {
            "age": 20,
            "create_time": "2019-09-15",
            "id": 1,
            "mail": "283340479@qq.com",
            "name": "yoyo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2019-09-16",
            "id": 2,
            "mail": "123445@qq.com",
            "name": "yoyo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}

目标:从响应的结果里面取除datas数据里面的一组数据mail对应的值283340479@qq.com,并断言。

test_demo.yml脚本内容

# 上海悠悠,QQ交流群:750815713
- config:
    name: test_demo
    variables: {}
- test:
    name: test_demo case1
    request:
        url: http://127.0.0.1:8000/api/test/demo
        method: GET
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
        json:
            username: test
            password: 123456
    extract:
        - mail: content.datas.0.mail         # 提取mail
    validate:
        - eq: [status_code, 200]
        - eq: [content.msg, success!]
        - eq: [$mail, 283340479@qq.com]

运行结果

D:\soft\untitled>hrun test_demo.yml
test_demo case1
INFO     GET http://127.0.0.1:8000/api/test/demo
INFO     status_code: 200, response_time(ms): 4.99 ms, response_length: 255 bytes
INFO     start to extract from response object.
INFO     start to validate.
.

----------------------------------------------------------------------
Ran 1 test in 0.012s

OK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\soft\untitled\reports\1569147460.html

运行成功!

转载于:https://www.cnblogs.com/yoyoketang/p/11568565.html

httprunner是一个基于Python的开源接口自动化测试框架,它提供了丰富的功能和便捷的接口来进行接口测试。 在httprunner中,参数和返回值是在测试用例中进行定义和使用的。 1. 参数(Variables):httprunner允许在测试用例中定义参数,用于在不同的请求之间共享数据。参数可以通过两种方式定义: - 在测试用例文件的顶部定义全局参数,可以在整个测试用例中使用。 - 在每个测试用例的请求中定义局部参数,只能在当前测试用例中使用。 定义参数的语法为: ```yaml variables: - 参数1: 值1 - 参数2: 值2 ``` 参数的值可以是固定值,也可以是函数表达式或者引用其他参数的方式来动态获取。 2. 返回值(Extract & Validate):在httprunner中,可以通过提取器(extractor)和校验器(validator)来对请求的返回值进行处理和验证。 - 提取器用于从请求的返回值中提取需要的数据,并将其作为参数存储起来,以供后续请求使用。 - 校验器用于对请求的返回值进行断言验证,以确保接口的返回结果符合预期。 提取器和校验器的定义通常在测试用例的验证部分进行,例如: ```yaml validate: - eq: ['status_code', 200] - eq: ['headers.Content-Type', 'application/json'] extract: - data.token: ['body.token'] ``` 上述示例中,校验器使用了eq断言方法来验证状态码和Content-Type的值,提取器将请求返回的body.token的值提取出来,并存储在data.token参数中。 这些是httprunner中参数和返回值的基本概念和用法,通过合理的使用,可以提高接口测试的灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值