前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python json对比利器--deepdiff

python json对比利器--deepdiff

作者头像
雷子
修改2022-09-04 17:06:24
3.2K0
修改2022-09-04 17:06:24
举报
文章被收录于专栏:雷子说测试开发

主要用来对比两个对象之间的差异性,搜索某个元素是都在一个对象中,对一个可迭代对象进行hash运算。

可以在:Python 3.6+ and PyPy3.

主要组成部分

DeepDiff:比较两个对象,对象可以是字段、字符串等可迭代的对象

DeepSearch:在对象中搜索其他对象

DeepHash:根据对象的内容进行哈希处理

安装方式

代码语言:javascript
复制
pip install deepdiff

如何使用呢?

我们去对比两个json

代码语言:javascript
复制
from deepdiff import  DeepDiff

jsonone={
    'code':1,
    "message":"成功",
    'data':{
        'id':1
    }
}
jsontwo={
    'code':2,
    "message":"成功",
    'data':{
        'id':2
    }
}
print(DeepDiff(jsonone,jsontwo))

看下最后输出结果

代码语言:javascript
复制
{'values_changed': 
  {"root['code']": 
    {'new_value': 2, 'old_value': 1}, 
    "root['data']['id']": 
    {'new_value': 2, 'old_value': 1}}}

主要内容回输出一下结果

代码语言:javascript
复制
主要包含以下四种情况
type_changes:类型改变的key
values_changed:值发生变化的key
dictionary_item_added:字典key添加
dictionary_item_removed:字段key删除

在使用的时候,我们还可以下面参数,根据我们的需要去选择就可以。下面是支持的字段选择。

代码语言:javascript
复制

    def __init__(self,
                 t1,
                 t2,
                 cache_purge_level=1,
                 cache_size=0,
                 cache_tuning_sample_size=0,
                 custom_operators=None,
                 cutoff_distance_for_pairs=CUTOFF_DISTANCE_FOR_PAIRS_DEFAULT,
                 cutoff_intersection_for_pairs=CUTOFF_INTERSECTION_FOR_PAIRS_DEFAULT,
                 encodings=None,
                 exclude_obj_callback=None,
                 exclude_paths=None,
                 exclude_regex_paths=None,
                 exclude_types=None,
                 get_deep_distance=False,
                 group_by=None,
                 hasher=None,
                 hashes=None,
                 ignore_encoding_errors=False,
                 ignore_nan_inequality=False,
                 ignore_numeric_type_changes=False,
                 ignore_order=False,
                 ignore_order_func=None,
                 ignore_private_variables=True,
                 ignore_string_case=False,
                 ignore_string_type_changes=False,
                 ignore_type_in_groups=None,
                 ignore_type_subclasses=False,
                 iterable_compare_func=None,
                 log_frequency_in_sec=0,
                 math_epsilon=None,
                 max_diffs=None,
                 max_passes=10000000,
                 number_format_notation="f",
                 number_to_string_func=None,
                 progress_logger=logger.info,
                 report_repetition=False,
                 significant_digits=None,
                 truncate_datetime=None,
                 verbose_level=1,
                 view=TEXT_VIEW,
                 _original_type=None,
                 _parameters=None,
                 _shared_parameters=None,
                 **kwargs):

除了这些,还可以

DeepSearch使用

查找指定元素是否存在

demo如下:

代码语言:javascript
复制
from  deepdiff import DeepSearch

jsonone={
    'code':1,
    "message":"成功",
    'data':{
        'id':1
    }
}

print(DeepSearch(jsonone,"id"))
print(DeepSearch(jsonone,"name"))

结果如下:

代码语言:javascript
复制
{'matched_paths': ["root['data']['id']"]}
{}

结果可以看到,如果字段不存在,就返回空字典,这样也方便了我们在测试中的使用

DeepHash使用

主要用来对对象进行hash运算

代码语言:javascript
复制
from  deepdiff import DeepHash

jsonone={
    'code':1,
    "message":"成功",
    'data':{
        'id':1
    }
}

print(DeepHash(jsonone))

可以打印对应的hash,对比hash。

那么如何在实际中使用呢。

1.deepdiff主要可在在单元测试

2.自动化测试上给予我们很大的方便,能让我们更快速的对别与预期的结果是否一致;

3.如果业务中有业务API升级改造场景也可以使用,对比api不同版本之间的差异化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档