【发布时间】:2020-09-01 00:39:58
【问题描述】:
出于性能调整的原因,我想针对我的生产数据库副本运行 Django 测试。据我了解,这应该可以通过:
(1) 调整 Django 设置,如
DATABASES = {
'default': {
...
'TEST': {
'NAME': 'my_database_copy',
},
}
}
和 (2) 使用--keepdb 标志,如python manage.py test --keepdb。[1]
但是当我这样做时,进程挂起,看起来像这样:
bash-4.2$ python manage.py test --keepdb
Using existing test database for alias 'default'...
(进程不会以ctrl+c 关闭。我正在使用 Docker,我通过重新启动 Docker 来停止它。)
数据库没有未应用的迁移,如果省略 --keepdb,测试命令 (python manage.py test) 工作正常。
我确认数据库副本已正确恢复并可访问,因为我可以在运行 python manage.py shell 时访问它。
[1]https://docs.djangoproject.com/en/3.1/topics/testing/overview/#preserving-the-test-database
【问题讨论】:
-
如果不使用
--keepdb,测试数据库会被删除吗? -
@Ben 如果我省略了
--keepdb标志,那么测试进程会识别出database “my_database_copy” already exists,并询问进程是否应该删除它。如果我输入“否”,则测试过程存在(自然)。如果我输入“是”,则测试成功运行。如果我然后运行python manage.py shell,我可以确认数据库已被删除,django.db.utils.OperationalError: FATAL: database “my_database_copy” does not exist。 -
有趣,在调试模式下运行会告诉你什么吗docs.djangoproject.com/en/3.1/ref/django-admin/…
python manage.py test --keepdb --debug-mode -
@Ben 感谢您的帮助。我相信我能够通过更改
SERIALIZE设置来解决问题。请参阅我发布的答案。
标签: python django django-testing django-tests