json diff常用工具对比(排序)

您所在的位置:网站首页 json测试工具下载 json diff常用工具对比(排序)

json diff常用工具对比(排序)

2023-08-22 04:50| 来源: 网络整理| 查看: 265

背景:

在接口测试中,我们会经常通过对比接口的json数据来判断接口是否异常或者变动,常规比较简单的做法是直接将这个json进行文本diff,这样也是比较直观,可以参考之前写的文章,在线diff 。但是接口返回的数据中,列表并不是有序的,所以文本diff也会存在误报。怎么解决这个问题呢,其上网上有很多开源的第三方库可以选择,不需要自己再写复杂的算法逻辑

工具介绍:

主要有以下几种方式,

1、sorted 函数,使用递归进行排序比较。15万行json数据下,耗时为0.2s。结果为true或者false,要输出详细结果,需要自己额外写逻辑。

def ordered(obj): if isinstance(obj, dict): return sorted((k, ordered(v)) for k, v in obj.items()) if isinstance(obj, list): return sorted(ordered(x) for x in obj) else: return obj

2、deepdiff 第三方库,ignore_order为排序,默认不排序。15万的数据,不排序反而需要8秒,排序结果只需要3.5s左右,有详细结果输出,不需要自己写逻辑,而且还有很多参数可以,比如忽略大小写字母,ignore_string_case=True。数组数据重复参数过滤等

from deepdiff import DeepDiff DeepDiff11= DeepDiff(jsLoads1, jsLoads2,ignore_order=True,report_repetition=True)

deepdiff 参考文档 https://www.cnblogs.com/Neeo/articles/12785493.html

3、json_tools ,没有排序对比,不考虑!同样15万的数据下,不排序对比耗时0.2s

4、jsondiff 跟jsontools 一样,没有排序对比!而且在15万的数据下,直接卡死,弃用!

简单的测试数据,15万的json数据由于数据隐私,不对外提供

jsLoads1 = [{"nrfProfileId": "12345678-provision-0001", "servingPlmn": {"mcc": "310", "mnc": "003"}, "nrfAddresses": [{"scheme": "http", "fqdn": "192.168.240.9", "port": 5678}]}, {"nrfProfileId": "12345678-provision-0002", "servingPlmn": {"mcc": "310", "mnc": "003"}, "nrfAddresses": [{"scheme": "http", "fqdn": "www.baidu.com", "port": [5005,5002]}, {"scheme": "http", "fqdn": "150.132.165.200", "port": 5003}]}] jsLoads2 = [{"nrfProfileId": "12345678-provision-0001", "servingPlmn": {"mcc": "310", "mnc": "003"}, "nrfAddresses": [{"scheme": "http", "fqdn": "192.168.240.9", "port": 5678}]}, {"nrfProfileId": "12345678-provision-0002", "servingPlmn": {"mnc": "003", "mcc": "310"}, "nrfAddresses": [{"scheme": "http", "fqdn": "150.132.165.200", "port": 5003}, {"scheme": "http", "fqdn": "www.baidu.com", "port": [5002,5005]}]}] 总结

deepdiff 更适合测试同学做接口测试使用。如果想要更高的性能,这几种工具还是不够完美,需要参考源码自己研究!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3