• 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:Usersdell>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:softuntitled>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:softuntitled
    eports1569147460.html
    

    运行成功!

  • 相关阅读:
    经典javascript
    大话prototype
    DataTable使用方法总结
    实验四 Web服务器1socket编程
    2.4 OpenEuler中C语言中的函数调用测试
    20191323王予涵第13章学习笔记
    20191323王予涵第十三章学习笔记
    2.5 OpenEuler 中C与汇编的混合编程
    个人贡献
    20191323王予涵第十二章学习笔记
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11568565.html
Copyright © 2020-2023  润新知