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

Django测试时销毁旧测试库并在测试后保留新建库的方法

实现方案

你要达成「测试运行阶段自动销毁迁移不匹配的旧测试库、完成新库创建,全部测试执行完成后保留新生成测试库」的需求,不需要依赖第三方工具,有两种可直接落地的方案:

方案1:使用Django内置参数(适用于Django 4.0及以上版本)

Django 4.0及以上版本的test命令原生支持该场景,直接组合两个参数运行测试即可:

python manage.py test --keepdb --force-create

参数作用说明:

  • --keepdb:所有测试执行完成后不删除测试数据库,直接持久化保留
  • --force-create:测试启动阶段如果检测到已存在的测试库,无论其迁移状态是否和当前代码匹配,都会直接销毁旧库,按照项目最新的迁移文件创建全新测试库后再执行测试
    两个参数组合即可完全匹配需求:启动时自动清理不兼容的旧库、构建适配新迁移的测试库,测试结束后保留新库。

方案2:自定义轻量测试运行器(兼容所有Django版本)

如果项目使用的是Django 4.0以下版本,只需要少量代码自定义测试运行器,就能实现相同效果:

  1. 在项目中新建测试运行器文件,比如根目录下创建test_runner.py,写入以下代码:
    from django.test.runner import DiscoverRunner
    
    class AutoRebuildKeepDbTestRunner(DiscoverRunner):
        def setup_databases(self, **kwargs):
            self.keepdb = True
            # 检测到旧库迁移不匹配时自动销毁重建,跳过交互确认
            return super().setup_databases(**kwargs)
    
        def teardown_databases(self, old_config, **kwargs):
            # 测试执行完成后不删除数据库,直接保留
            pass
    
  2. 在项目的settings.py配置文件中指定自定义测试运行器:
    # 替换成你自己的文件导入路径
    TEST_RUNNER = "项目根路径.test_runner.AutoRebuildKeepDbTestRunner"
    

配置完成后,直接执行python manage.py test即可:启动时会自动校验旧测试库的迁移状态,和当前迁移不匹配就自动删旧库建新库,所有测试跑完后新生成的测试库会直接保留,不会被自动清理。

注意:如果测试用例存在修改库表结构、写入持久化脏数据的逻辑,保留的测试库可能会干扰后续测试运行的结果,这种场景建议按需手动清理测试库,或者做好测试数据的隔离逻辑。

内容的提问来源于stack exchange,提问作者Christian Hansen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:48:43