编写使用主数据库的Django测试

时间:2018-10-16 05:31:50

标签: django testing

我的django项目有多个数据迁移,大约需要2个小时才能应用。这些数据迁移构成了原始数据集上的一系列转换(清理,提取新字段等)。数据库的最终状态由15-20个表组成。

我还具有每天导入新数据的代码,这些代码也以相同格式推送到现有数据库表中。

我想编写测试来确保数据库内容在任何给定时刻都是正确的(在应用了初始数据迁移之后,在进行了新的导入等之后)。这些测试将检查某些事情,例如某个预期不具有空值的特定列是否确实不存在,派生字段的值是否正确等等。

我的问题是,django每次运行测试时都尝试通过应用所有迁移来创建测试数据库。但是由于数据迁移需要很长时间才能应用,因此运行这样的测试变得非常不切实际。我也不想使用keepdb选项,因为我也想在更改原始数据库之后运行那些测试。

对于这种情况,我不确定通用的最佳惯用django方法是什么。

3 个答案:

答案 0 :(得分:0)

您可以使用pytest来访问/重用数据库。

在测试用例中只需使用@pytest.mark.django_db

pytest非常适合测试您的Django代码。我绝对推荐。

有关更多信息,请参见here

答案 1 :(得分:0)

您可以运行django测试用例以持久化测试数据库。

python manage.py test -k

它将创建测试数据库onece,并将其保留。

答案 2 :(得分:0)

备份当前数据库并将其命名为“ test_database_name”。

例如。 DB_name = Django。然后将备份数据库的名称保持为test_django。

mysqldump -u username -p database_name > database_backup.sql
mysql -u username -p test_database_name < database_backup.sql

运行测试时,请使用此命令

python manage.py test --keepdb

Django将使用备份数据库进行测试,因此您不必一次又一次地应用迁移。但是,请确保测试数据库的名称正确。命令--keepdb将保留数据库,并且不允许Django在每次运行测试时删除数据库。

此外,每次运行测试时,Django都会刷新备份数据库中的所有数据,但不会刷新迁移。因此,每次运行测试时,都必须创建一个 SetUp类以设置所有用户,权限,组等。

相关问题