主要用来对比两个对象之间的差异性,搜索某个元素是都在一个对象中,对一个可迭代对象进行hash运算。
可以在:Python 3.6+ and PyPy3.
主要组成部分
DeepDiff:比较两个对象,对象可以是字段、字符串等可迭代的对象
DeepSearch:在对象中搜索其他对象
DeepHash:根据对象的内容进行哈希处理
安装方式
pip install deepdiff
如何使用呢?
我们去对比两个json
from deepdiff import DeepDiff
jsonone={
'code':1,
"message":"成功",
'data':{
'id':1
}
}
jsontwo={
'code':2,
"message":"成功",
'data':{
'id':2
}
}
print(DeepDiff(jsonone,jsontwo))
看下最后输出结果
{'values_changed':
{"root['code']":
{'new_value': 2, 'old_value': 1},
"root['data']['id']":
{'new_value': 2, 'old_value': 1}}}
主要内容回输出一下结果
主要包含以下四种情况
type_changes:类型改变的key
values_changed:值发生变化的key
dictionary_item_added:字典key添加
dictionary_item_removed:字段key删除
在使用的时候,我们还可以下面参数,根据我们的需要去选择就可以。下面是支持的字段选择。
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如下:
from deepdiff import DeepSearch
jsonone={
'code':1,
"message":"成功",
'data':{
'id':1
}
}
print(DeepSearch(jsonone,"id"))
print(DeepSearch(jsonone,"name"))
结果如下:
{'matched_paths': ["root['data']['id']"]}
{}
结果可以看到,如果字段不存在,就返回空字典,这样也方便了我们在测试中的使用
DeepHash使用
主要用来对对象进行hash运算
from deepdiff import DeepHash
jsonone={
'code':1,
"message":"成功",
'data':{
'id':1
}
}
print(DeepHash(jsonone))
可以打印对应的hash,对比hash。
那么如何在实际中使用呢。
1.deepdiff主要可在在单元测试
2.自动化测试上给予我们很大的方便,能让我们更快速的对别与预期的结果是否一致;
3.如果业务中有业务API升级改造场景也可以使用,对比api不同版本之间的差异化。