前言提取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.key 和content.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 运行成功!
2019第一期《python测试开发》课程,10月13号开学!本期上课时间:10月13号-12月8号,每周六、周日晚上20:30-22:30
|