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

如何使用TestCase生成的测试数据库启动Django开发服务器?

解决方案:基于Django测试数据库启动开发服务器

嘿,这个需求其实挺常见的,我来给你一步步拆解解决方案:

一、先让测试数据库持久化(SQLite 为例)

默认情况下,Django 用 SQLite 跑测试时会用内存数据库(:memory:),测试结束后直接销毁,所以第一步得让测试数据保留下来。

修改你的 settings.py,给数据库的 TEST 段指定一个具体的文件路径,这样测试生成的数据就会存在这个文件里,不会被自动删除:

# settings.py
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',  # 你的常规开发数据库
        'TEST': {
            'NAME': BASE_DIR / 'test_db.sqlite3',  # 指定测试数据库的存储文件
        }
    }
}

然后运行测试命令,记得加上 --keepdb 参数(确保测试后数据库不被删除),让 django-autofixture 完成数据填充:

python manage.py test --keepdb

等测试跑完,test_db.sqlite3 文件就会出现在项目根目录,里面就是你需要的测试数据了。

二、切换开发服务器到测试数据库

现在只需要临时修改开发环境的数据库配置,指向刚才生成的测试数据库文件就行:

# 临时修改 settings.py,用完记得改回原配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'test_db.sqlite3',
    }
}

启动开发服务器:

python manage.py runserver

打开浏览器访问,就能看到测试数据填充后的网站效果啦!

三、进阶技巧:用环境变量切换(不用改代码)

如果你不想每次都手动修改 settings.py,可以用环境变量来动态切换数据库,更灵活:

# settings.py
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / os.getenv('DJANGO_DB_NAME', 'db.sqlite3'),
        'TEST': {
            'NAME': BASE_DIR / 'test_db.sqlite3',
        }
    }
}

启动服务器时直接指定环境变量,不用改代码:

DJANGO_DB_NAME=test_db.sqlite3 python manage.py runserver

其他数据库(PostgreSQL/MySQL)的思路

如果用的是其他数据库,核心逻辑一样:

  • 运行测试时加上 --keepdb 参数,避免测试数据库被删除;
  • 测试完成后,修改开发环境的数据库配置,指向测试用的数据库实例(确保你的开发用户有访问权限);
  • 启动开发服务器即可。

内容的提问来源于stack exchange,提问作者DA--

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:48