本文共 2688 字,大约阅读时间需要 8 分钟。
在使用HTTPRunner工具时,提取响应数据是非常重要的一步操作。以下将详细介绍如何从返回的JSON数据中提取所需的各种数据。
在HTTPRunner中,content对象实际上是请求返回的响应内容。在Python中,这个对象通常会返回原始的字节类型(byte)。为了方便提取数据,我们可以将其转换为字典类型。以下是一个示例响应:
{ "code": 0, "msg": "login success!", "username": "test", "token": "b3f7e8e12d23591ea671374dee818c63b1599d4d"} 将其转换为Python字典后,可以通过以下方式提取数据:
content.code 提取 code 对应的值 0content.msg 提取 msg 对应的值 "login success!"content.username 提取 username 对应的值 "test"content.token 提取 token 对应的值 "b3f7e8e12d23591ea671374dee818c63b1599d4d"如果返回的数据是列表类型,例如以下结构:
[ { "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" }] 可以通过以下方式提取数据:
content.0 提取列表中的第一组数据:{"age": 20, "create_time": "2019-09-15", "id": 1, "mail": "283340479@qq.com", "name": "yoyo", "sex": "M"}content.1 提取列表中的第二组数据:{"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 对应值的第三个字符 "y",可以使用 content.0.name[2]。
以下是一个实际案例,展示如何从响应数据中提取所需数据。假设通过HTTPRunner发起一个GET请求,返回的响应内容如下:
{ "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.ymlconfig: 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 validate: - eq: [status_code, 200] - eq: [content.msg, success!] - eq: [$mail, 283340479@qq.com] 运行上述脚本后,会从响应中提取 mail 对应的值 "283340479@qq.com",并验证响应状态码、消息内容以及提取结果。
总结来说,content 对象的提取方法有两种:
content.key:直接通过键名访问对应值。content.int:用于访问列表中的具体项。通过层级一层一层地查找,可以轻松提取所需的数据。
转载地址:http://sxlbz.baihongyu.com/