跳转到主要内容

针对测试的数据库数据与数据集的差异比较

项目描述

https://travis-ci.org/yourlabs/django-dbdiff.svg https://codecov.io/github/yourlabs/django-dbdiff/coverage.svg?branch=master https://badge.fury.io/py/django-dbdiff.png

django-dbdiff

在编写现有代码的测试时,我相当懒惰,然而在重复的手动测试操作方面,我更加懒惰。

这个包旨在去除从django-representatives和django-representatives-votes中重复的数据导入测试,这些测试在django-cities-light中被重用。

数据库状态断言

测试数据导入脚本的一个好方法是创建一个源数据配置文件,包含数据子集,即只包含10个城市而不是28K个,或者只包含3个欧洲议会代表而不是3600个,将导入函数用这些数据喂养,然后比较数据库状态和Django配置文件。这看起来就像我以前做的那样。

  • 使用以下命令创建一个小数据提取:shuf -n3 cities15000.txt > cities_light/tests/cities_test_fixture.txt,

  • 在干净的数据库上对该导入脚本进行测试,

  • 手动验证数据库,并运行django-admin dumpdata –indent=4 cities_light > cities_light/tests/cities_test_expected.txt

  • 然后,创建一个调用配置文件和导入脚本的测试用例,

  • 编写和维护一些有趣(模糊?)重复的测试代码,以确保数据库处于预期状态。

当修复了一个错误时,只需将案例添加到配置文件中,并重复此过程以创建新的预期数据转储,使用覆盖率确保没有遗漏任何案例。

使用django-dbdiff,我只需要维护初始数据提取,并用Fixture('appname/path/to/fixture', models=[YourModelToTest]).assertNoDiff()django.test.TransactionTestCase中进行测试,该测试用例具有reset_sequences=True

  • 如果相关的配置文件不存在,它将在第一次运行时自动创建,并引发“FixtureCreated”异常以失败测试并告知创建的配置文件路径,这样就不会误导用户认为测试通过现有的配置文件,

  • 如果配置文件存在,它将在相关模型上运行dumpdata并与配置文件进行GNU diff,如果有任何输出,它将在“DiffFound”异常中引发,失败测试并打印差异。

用法

示例

from django import TransactionTestCase
from dbdiff.fixture import Fixture


class YourImportTest(test.TransactionTestCase):
    reset_sequences = True

    def test_your_import(self):
        your_import()

        Fixture('yourapp/tests/yourtest.json',
                models=[YourModel]).assertNoDiff()

第一次运行时,将引发FixtureCreated异常,测试将失败。这是为了告知用户测试实际上并没有运行。然而,在下一次运行时,它将通过。

如果在数据库和测试配置文件之间发现任何差异,则diff()将返回GNU diff输出的差异。

如果您需要全局忽略字段,请设置类级别变量exclude。

Fixture.exclude = {'mrsrequest.mrsrequest': ['token']}

而不是在运行测试前手动删除配置文件以重新生成它们,只需用FIXTURE_REWRITE=1环境变量运行您的测试。这将覆盖配置文件并使测试看起来像通过了。

请参阅测试和文档字符串以获取详细信息。

需求

支持MySQL、SQLite和PostgreSQL,Python 3.8至3.12以及Django 3.2至5.0 - 总是支持Django的主分支会更好,这样我们就可以在它发布时轻松升级,这是拥有100%覆盖率的卖点之一。

安装

使用pip安装django-dbdiff并将dbdiff添加到INSTALLED_APPS。

Django模型观察者

值得注意的是,存在一个相关且可能类似的应用程序:https://github.com/Griffosx/djmo

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

django-dbdiff-0.9.6.tar.gz (16.8 kB 查看哈希值)

上传时间

支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面