Django 测试挂起 --keepdb 标志
Django testing hangs with --keepdb flag
出于性能调整的原因,我想 运行 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
通过添加 SERIALIZE
键来调整设置字典,如下所示:
DATABASES = {
'default': {
...
'TEST': {
'NAME': 'my_database_copy',
'SERIALIZE': False,
},
}
}
当SERIALIZE
为True
(默认值)时,Django 会尝试将整个数据库的副本作为字符串读入内存。参见[1]。当数据库引擎不支持事务时,这被认为有助于测试,但在我的情况下由于内存不足而崩溃。此处介绍了通过设置停用此行为[2]。
[2]https://docs.djangoproject.com/en/3.1/ref/settings/#serialize
出于性能调整的原因,我想 运行 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
通过添加 SERIALIZE
键来调整设置字典,如下所示:
DATABASES = {
'default': {
...
'TEST': {
'NAME': 'my_database_copy',
'SERIALIZE': False,
},
}
}
当SERIALIZE
为True
(默认值)时,Django 会尝试将整个数据库的副本作为字符串读入内存。参见[1]。当数据库引擎不支持事务时,这被认为有助于测试,但在我的情况下由于内存不足而崩溃。此处介绍了通过设置停用此行为[2]。
[2]https://docs.djangoproject.com/en/3.1/ref/settings/#serialize