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

  • 2019 年 10 月 8 日
  • 筆記

前言

提取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": "[email protected]",          "name": "yoyo",          "sex": "M"      },      {          "age": 21,          "create_time": "2019-09-16",          "id": 2,          "mail": "[email protected]",          "name": "yoyo111",          "sex": "M"      }  ]

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

  • content.0 取出list里面的第一组数据{“age”: 20, “create_time”: “2019-09-15”, “id”: 1, “mail”: “[email protected]”, “name”: “yoyo”, “sex”: “M”}
  • content.1 取出list里面的第二组数据{“age”: 21, “create_time”: “2019-09-16”, “id”: 2, “mail”: “[email protected]”, “name”: “yoyo111”, “sex”: “M”}
  • content.0.name 取出第一组数据的name对应值”yoyo”
  • content.1.name 取出第二组数据的name对应的值”yoyo111”
  • content.0.mail 取出第一组数据的mail对应值”[email protected]

通过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": "[email protected]",              "name": "yoyo",              "sex": "M"          },          {              "age": 21,              "create_time": "2019-09-16",              "id": 2,              "mail": "[email protected]",              "name": "yoyo111",              "sex": "M"          }      ],      "msg": "success!"  }

目标:从响应的结果里面取除datas数据里面的一组数据mail对应的值[email protected],并断言。

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, [email protected]]

运行结果

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:softuntitledreports1569147460.html

运行成功!