测试夹具的数据库数据差异

django-dbdiff的Python项目详细描述


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

django dbdiff

在编写现有代码的测试时,我是相当懒惰的,但是,我 当涉及到重复的手动测试操作时,甚至更加懒惰。

此包旨在消除来自 Django代表和Django代表投票,在 Django城市之光。

数据库状态断言

测试数据导入脚本的一个好方法是使用 数据的子集,即只有10个城市而不是28K或只有3个欧洲城市 议会代表而不是3600人,为进口职能提供资金 然后将数据库状态与django fixture进行比较。这看起来像什么 我习惯于这样做:

  • 使用这样的命令创建一个小的数据提取 shuf-n3 cities15000.txt>;城市照明/测试/城市测试夹具.txt
  • 对干净数据库上的导入脚本使用它,
  • 手动验证数据库,然后运行 django admin dumpdata–indent=4个城市/u light>;城市/tests/cities\u test应为.txt
  • 然后,创建一个测试用例,对fixture调用导入脚本,
  • 写些有趣的(模糊的?)重复测试代码以确保 数据库处于预期状态。

当一个bug被修复时,只需将case添加到fixture中并重复这个过程 创建新的预期数据转储,使用覆盖率以确保没有遗漏案例。

使用django dbdiff,我只需要维护到初始数据提取,然后测试 它与Fixture('appname/path/to/fixture',models=[YourModelToTest]).assertNoDiff()在一个 django.test.TransactionTestCasereset_sequences=True

    如果所需的夹具不存在,它将自动创建。 在第一次运行时使用有关模型的dumpdata “fixturecreated”异常使测试失败并通知 创建了fixture,这样就不会误导用户对测试的思考 通过现有的夹具, 如果该夹具存在,它将运行在有关模型和GNU上。 将它与固定装置进行比较,如果有任何输出,它将在 “difffound”异常,测试失败并打印diff。

使用量

示例:

fromdjangoimportTransactionTestCasefromdbdiff.fixtureimportFixtureclassYourImportTest(test.TransactionTestCase):reset_sequences=Truedeftest_your_import(self):your_import()Fixture('yourapp/tests/yourtest.json',models=[YourModel]).assertNoDiff()

第一次,它将引发一个FixtureCreated异常,测试将 失败。这是通知用户测试没有真正运行。在下一个 尽管如此,它还是会过去的。

如果在数据库和测试夹具之间发现任何差异,那么 diff()将返回gnu diff输出的diff。

如果需要全局忽略字段,请设置类级别变量exclude,如下所示:

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

而不是在运行测试之前手动删除设备 重新生成它们,只需使用fixture write=1环境运行测试 变量。这将覆盖fixture并使测试看起来像 通过。

请参阅测试和docstrings以获取详细信息。

要求

mysql、sqlite和postgresql、python 2.7和3.4以及 django 1.7到1.10-最好支持django的主人,这样我们 发布后可以轻松升级,这是卖点之一 因为有100%的保险。

安装

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

django模型观察员

<>这是一个相关的,也许类似的应用程序存在: https://github.com/Griffosx/djmo

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android中Twitter共享的java xAuth身份验证?   带有@XmlAnyAttribute和方法的java Bug?(使用JAXB-RI)   安卓 ArrayAdapter导致java。lang.NullPointerException   java如何使用JExel从现有excel文件中删除工作表   java树映射随机停止正确返回值   使用switch和scanner类java使用用户选择   java JCalendar多天选择   Java文件zip正在创建损坏的文件   Ajax调用中的java未定义错误   java处理JSON更改信息的最佳方法   java JNI不适用于AppKit线程   java在运行时为JTable的特定行设置背景色   java如何在for循环中添加按钮?   java在getclass()方法之后强制转换对象