如何指定Django测试使用的数据库,而不是每次都新建?

17 投票
2 回答
10472 浏览
提问于 2025-04-16 09:27

我想用一个已经存在的测试数据库来进行我的测试,而不是每次运行测试时都让Django自动创建和删除一个数据库。这样做可以吗?

2 个回答

7

谁在使用Django 1.8及以上版本

python manage.py test --keepdb

--keepdb 这个选项可以在测试运行之间保留测试数据库。这样做的好处是可以跳过创建和销毁数据库的步骤,这样可以大大减少测试运行的时间,特别是当测试数量很多的时候。如果测试数据库不存在,它会在第一次运行时创建,然后在后续的运行中保持不变。在运行测试之前,任何未应用的数据库迁移也会被应用到测试数据库上。

17

这是可能的,下面是一种方法:

1) 首先,你需要定义自己的测试运行器,具体怎么做可以查看 这里

2) 对于你的自定义测试运行器,可以参考 默认的测试运行器,你可以直接复制粘贴代码,然后把这一行注释掉:connection.creation.destroy_test_db(old_name, verbosity),这行代码是用来删除测试数据库的。然后我建议你把 connection.creation.create_test_db(..) 这一行放在一个 try except 结构里,像这样:

try:
    # Create the database the first time.
    connection.creation.create_test_db(verbosity, autoclobber=not interactive) 
except ..: # Look at the error that this will raise when create a database that already exist
    # Test database already created.
    pass 

3) 在 settings.py 文件中,把 TEST_RUNNER 绑定到你的测试运行器。

4) 现在可以这样运行你的测试:./manage.py test

撰写回答