火爆全网,python接口自动化测试-接口关联json解析神器实战(超细)

本文介绍了在接口自动化测试中如何处理JSON返回数据,特别是面对深层嵌套时的取值难题。文章推荐了jsonpath库,通过实例演示了其强大的解析能力,帮助测试人员更高效地进行接口测试。同时,文章还涵盖了Python编程、自动化测试项目实战等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

做接口测试的时候,大部分情况下返回的是json数据,我们需要对返回的json断言。

当返回的数据量比较大,并且嵌套的层级很深的时候,很多小伙伴不会取值,往往在返回结果取值上浪费很多时间,于是就有了 jsonpath 解析库,专门解决 json 路径深,取值难的问题。

字典取值

对接口返回的接口,转成 dict 类型,通过字典键值对取值

# 返回结果,这里是dict
result = {
    "code": 0,
    "data": [
        {
            "age": 20,
            "create_time": "2019-09-15",
            "id": 1,
            "mail": "2833@qq.com",
            "name": "mo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2019-09-16",
            "id": 2,
            "mail": "123445@qq.com",
            "name": "mo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}

# 字典取值断言
assert result["code"] == 0
assert result["msg"] == "success!"
assert result["data"][0]["name"] == "mo"

当层级越来越深的时候,会发现取值变得困难,并且list里面的内容往往不知道是第几个。

比如我想判断返回的结果里面有没有 “name”: “mo” 并且你不知道它是 data 列表中的第几个,这种情况断言就写的很复杂了。

正则取值

比如我想判断返回的结果里面有没有 “name”: “mo” 并且你不知道它是 data 列表中的第几个,这种情况断言就写的很复杂了。

可以用万能的正则取值,正则只能是针对字符串取值,dict 对象先转 json 字符串。

import re
import json

# 返回结果,这里是dict
result = {
    "code": 0,
    "data": [
        {
            "age": 20,
            "create_time": "2019-09-15",
            "id": 1,
            "mail": "2833@qq.com",
            "name": "mo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2019-09-16",
            "id": 2,
            "mail": "123445@qq.com",
            "name": "mo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}

# 断言data中包含"name": "mo"
result_to_json = json.dumps(result)
print(result_to_json)       # 先转json
# 方法1 正则取值
res = re.findall('"name": "(.+?)"', result_to_json)  # 正则从json中取值
print(res)
assert "mo" in res

# 方法2 直接判断包含
assert '"name": "mo"' in result_to_json

jsonpath 解析

接下来讲一个非常强大并且方便的 jsonpath 专门用于 json 解析,解决路径深的老大难问题!

先安装依赖包

pip install jsonpath

学习jsonpath 不得不提到xpath,这两者之间的语法是差不多的

XpathJSONPath描述
/$跟节点
.@现行节点
/. or []取子节点
n/a取父节点 JsonPath不支持
//相对节点 就是不管位置,选择所有符合条件的条件
**匹配所有元素节点
[][]迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
|[,]支持迭代器中做多选
[]?()支持过滤操作
n/a()支持表达式计算
()n/a分组,JsonPath不支持

使用示例

$ 是查找的根节点,传参数是python的dict 类型,当查找到的时候返回一个list结果,查找失败的时候返回 False.

import jsonpath

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


msg = jsonpath.jsonpath(result, '$.msg')
print(msg)   # 输出结果 ['success!']
names = jsonpath.jsonpath(result, '$..name')
print(names)   # 输出结果 ['mo', 'mo111']
no = jsonpath.jsonpath(result, '$..mo')
print(no)   # 找不到是结果是 False
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

生命不息,奋斗不止;没有付出就没有收获;只有拼尽全力才能创造奇迹;行动起来,让梦想照进现实;成功需要勇气和毅力;每一天都是新的起点,只要心怀信念,努力向前,未来一定会更加辉煌。

只有拼尽全力,才能看到真正的自己;只有迎难而上,才能成为更好的自己;只有坚持不懈,才能达到心中的目标。相信自己,勇往直前,未来一定会因你而精彩!

每一次努力,都是为了更好的自己。不要害怕失败,因为成功需要经历无数次的尝试。只有坚持不懈,才能跨越前进的道路,创造属于自己的辉煌。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值