You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

方法二:自定义测试运行器(适配灵活场景)

如果需要更动态的控制逻辑,比如根据命令行参数调整保留的数据库,可以自定义测试运行器:

  1. 在项目根目录创建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)
  1. 在settings.py中指定自定义测试运行器:
TEST_RUNNER = '你的项目名.test_runners.SelectiveKeepDBTestRunner'

之后运行测试就会自动仅保留three数据库。

方法三:临时配置文件(单次测试场景)

如果只是临时需求,不想修改主配置文件,可以创建临时测试配置:

  1. 新建test_settings.py,继承原配置并修改数据库TEST参数:
from .settings import *

# 仅保留three数据库
DATABASES['default']['TEST']['KEEPDB'] = False
DATABASES['two']['TEST']['KEEPDB'] = False
DATABASES['three']['TEST']['KEEPDB'] = True
  1. 运行测试时指定该配置:
python manage.py test --settings=你的项目名.test_settings

内容的提问来源于stack exchange,提问作者Cloud Artisans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:32:39