python

Python对象深度差异对比库之DeepDiff

2023-03-04  本文已影响0人  羋学僧

一、DeepDiff介绍

DeepDiff库常用来校验两个对象是否一致,并找出其中差异之处。

DeepDiff库由以下功能模块组成:

官网地址

二、DeepDiff常用操作

首先安装 DeepDiff,本文默认安装其最新版本:6.2.3

pip3 install deepdiff

高效的对比 JSON

如果实际请求结果和预期值的json数据都一致,那么会返回{}空字典,否则会返回对比差异的结果,接口测试中我们也可以根据这个特点进行断言。
导入

from deepdiff import DeepDiff

如果对比结果不同,将会给出下面对应的返回:

对比json

from deepdiff import  DeepDiff

json1={
    'code': 0,
    "message": "成功",
    "data": {
        "total": 28,
        "id":123
}
}
json2={
    'code':0,
    "message":"成功",
    "data": {
        "total": 29,
    }
}
print(DeepDiff(json1,json2))

输出结果,id移除,total值发生改变

DeepDiff在单元测试中的应用

import unittest
import requests
from deepdiff import DeepDiff
class MyCase(unittest.TestCase):
    expect = {
        'slideshow': {
            'author': 'Yours Truly Mi',
            'date': 'date of publication',
            'slides': [{
                'title': 'Wake up to WonderWidgets!',
                'type': 'all'
            }, {
                'items': ['Why <em>WonderWidgets</em> are great', 'Who <em>buys</em> WonderWidgets'],
                'title': 'Overview',
                'type': 'all'
            }],
            'title': 'Sample Slide Show'
        }
    }

    def setUp(self):
        self.response = requests.get('http://www.httpbin.org/json').json()
        print(self.response)

    def test_case01(self):
        print(DeepDiff(self.response, self.expect))

    def test_case02(self):
        print(DeepDiff(self.response, self.expect, view='tree', ignore_order=True, ignore_string_case=True,exclude_paths={"root['slideshow']['author']"}))

if __name__ == '__main__':
    unittest.main()

测试用例1断言返回author与期望值,值发生变化。
其实,在实际接口断言中,可能需要校验的字段顺序不一样,又或者有一些字段值不需要,为了解决这类问题,Deepdiff也提供了相信的参数,只需要在比较的时候加入,传入对应参数即可。

测试用例2断言返回author不参与比较。

上一篇 下一篇

猜你喜欢

热点阅读