如何指定Django Tests使用的数据库而不是每次都构建它?

Rya*_*zel 14 python django unit-testing

我希望能够使用现有的测试数据库来运行我的测试,并且每次我想运行测试时都不会让Django创建和删除数据库.这可能吗?

mou*_*uad 15

这是可能的,这是一种方式:

1)在这里定义你自己的测试运行器,看看如何.

2)对于你的自定义测试运行器在默认测试运行器中查看,你可以复制并通过代码并只注释这一行:connection.creation.destroy_test_db(old_name, verbosity)它负责销毁测试数据库,我认为你应该把这connection.creation.create_test_db(..)条线放在试试中除了某些东西像这样可能:

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 
Run Code Online (Sandbox Code Playgroud)

3)将setting.py中的TEST_RUNNER绑定到测试运行器.

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


小智 6

谁在使用Django> = 1.8

python manage.py test --keepdb
Run Code Online (Sandbox Code Playgroud)

--keepdb在测试运行之间保留测试数据库.这样做的优点是可以跳过create和destroy操作,这可以大大减少运行测试的时间,特别是在大型测试套件中.如果测试数据库不存在,它将在第一次运行时创建,然后为每次后续运行保留.在运行测试套件之前,任何未应用的迁移也将应用于测试数据库.