我的django项目有多个数据迁移,大约需要2个小时才能应用。这些数据迁移构成了原始数据集上的一系列转换(清理,提取新字段等)。数据库的最终状态由15-20个表组成。
我还具有每天导入新数据的代码,这些代码也以相同格式推送到现有数据库表中。
我想编写测试来确保数据库内容在任何给定时刻都是正确的(在应用了初始数据迁移之后,在进行了新的导入等之后)。这些测试将检查某些事情,例如某个预期不具有空值的特定列是否确实不存在,派生字段的值是否正确等等。
我的问题是,django每次运行测试时都尝试通过应用所有迁移来创建测试数据库。但是由于数据迁移需要很长时间才能应用,因此运行这样的测试变得非常不切实际。我也不想使用keepdb选项,因为我也想在更改原始数据库之后运行那些测试。
对于这种情况,我不确定通用的最佳惯用django方法是什么。
答案 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类以设置所有用户,权限,组等。