测试夹具的数据库数据差异
django-dbdiff的Python项目详细描述
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.TransactionTestCase有reset_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。