pytest-django中django_db_keepdb无法保留测试数据库的问题
问题原因及解决方法
你误解了django_db_keepdb的使用方式——它不是作为fixture传入测试函数的,而是一个测试标记,或者通过命令行参数启用的功能。你之前把它当作函数参数的写法不会触发保留数据库的逻辑,所以测试后数据库还是会被销毁。
正确用法
方法1:使用django_db_keepdb标记替换django_db
把测试函数上的@pytest.mark.django_db换成@pytest.mark.django_db_keepdb,这样该测试会复用现有测试库并在结束后保留:
import datetime import pytest from annotations import import_data @pytest.mark.django_db_keepdb def test_import_data(): start_date = datetime.datetime(2016, 1, 1) end_date = datetime.datetime(2016, 6, 1) import_data.import_data(start_date, end_date)
方法2:通过命令行参数全局启用
保留原测试代码的@pytest.mark.django_db,运行测试时添加--keepdb参数,这样所有测试都会保留数据库:
pytest --keepdb
方法3:在配置文件中默认启用
如果希望每次运行测试都自动保留数据库,可以在项目的pytest.ini或pyproject.toml中添加配置:
- 若用
pytest.ini:
[pytest] addopts = --keepdb
- 若用
pyproject.toml:
[tool.pytest.ini_options] addopts = "--keepdb"
验证效果
使用正确方法后,测试日志会显示Reusing existing test database for alias 'default' ('test_vita')...(首次运行还是会创建,后续复用),测试完成后不会出现Destroying test database...的日志,数据库会被保留下来供你事后查看。
内容的提问来源于stack exchange,提问作者PlacidLush
相关产品推荐
相关产品推荐

