Django测试:运行单元测试时如何仅保留指定测试数据库?
解决Django测试时仅保留指定数据库的问题
方法一:通过数据库TEST配置精准控制
直接在settings.py的数据库配置中,给目标数据库单独设置KEEPDB=True,其余数据库设为False:
DATABASES = { 'default': { ... # 原有数据库配置 'TEST': { 'KEEPDB': False, }, }, 'two': { ... # 原有数据库配置 'TEST': { 'KEEPDB': False, }, }, 'three': { ... # 原有数据库配置 'TEST': { 'KEEPDB': True, }, }, }
运行python manage.py test时,Django会自动保留three数据库,重建default和two。
方法二:自定义测试运行器(适配灵活场景)
如果需要更动态的控制逻辑,比如根据命令行参数调整保留的数据库,可以自定义测试运行器:
- 在项目根目录创建
test_runners.py,写入以下代码:
from django.test.runner import DiscoverRunner class SelectiveKeepDBTestRunner(DiscoverRunner): def setup_databases(self, **kwargs): # 遍历所有数据库配置,仅标记three为保留 for alias in self.databases: self.databases[alias]['TEST']['KEEPDB'] = (alias == 'three') # 调用父类方法完成数据库初始化 return super().setup_databases(**kwargs)
- 在
settings.py中指定自定义测试运行器:
TEST_RUNNER = '你的项目名.test_runners.SelectiveKeepDBTestRunner'
之后运行测试就会自动仅保留three数据库。
方法三:临时配置文件(单次测试场景)
如果只是临时需求,不想修改主配置文件,可以创建临时测试配置:
- 新建
test_settings.py,继承原配置并修改数据库TEST参数:
from .settings import * # 仅保留three数据库 DATABASES['default']['TEST']['KEEPDB'] = False DATABASES['two']['TEST']['KEEPDB'] = False DATABASES['three']['TEST']['KEEPDB'] = True
- 运行测试时指定该配置:
python manage.py test --settings=你的项目名.test_settings
内容的提问来源于stack exchange,提问作者Cloud Artisans
相关产品推荐
相关产品推荐

