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

Django项目新增数据库后测试报错 求无需逐个修改用例的解决方案

问题解决方案

更优的全局配置方案

  • 方案1:自定义项目统一测试基类(最推荐,兼容性最强)
    你只需要在项目公共工具目录下定义一个继承自Django原生TestCase的基类,一次性配置databases属性,所有原有测试类改为继承该基类即可,无需逐个修改测试类配置:
# 示例路径:common/testcases.py
from django.test import TestCase as BaseDjangoTestCase

class TestCase(BaseDjangoTestCase):
    # 后续新增数据库只需要修改此处即可
    databases = {"default", "new_database"}
    # 也可直接写 databases = "__all__" 适配所有后续新增的数据库

原有测试代码仅需要替换import语句,把from django.test import TestCase改为from common.testcases import TestCase即可,整体改动量极小,可扩展性最高。

  • 方案2:pytest-django全局配置(若项目使用pytest作为测试框架)
    如果你的项目用pytest-django运行测试,可以在conftest.py中添加全局fixture,默认给所有测试用例开放所有数据库访问权限:
import pytest

@pytest.fixture(autouse=True)
def enable_all_db_access_for_all_tests(db):
    pass

或者在pytest配置文件中添加django_db_reset_sequences = True配合全局数据库权限配置即可。

报错原因说明

Django的TestCase类为了实现测试用例之间的隔离,默认会对settings中DATABASES配置项里所有已注册的数据库执行事务初始化操作:测试运行前开启事务,测试执行完成后回滚事务,保证各个测试用例的数据互不影响。
哪怕你的测试用例代码完全没有主动访问新增的new_database,这个全局事务初始化的动作也会触发Django的测试数据库访问权限校验,因为你没有给当前测试类配置允许访问该数据库,所以会抛出Database queries to 'new-database' are not allowed in this test的报错。

内容的提问来源于stack exchange,提问作者bardia zamanian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:04