2011-01-05 30 views
13

我希望能够使用现有的测试数据库来运行我的测试,并且在每次我想运行测试时都没有Django创建和删除数据库。这可能吗?我怎样才能指定一个数据库的Django测试使用,而不是让它每次构建它?

+0

你为什么要这么做?你也想测试数据库的创建... – 2011-01-05 16:55:45

+6

不需要花费数小时才能建立。 – 2011-01-05 17:12:51

+0

您可以选择不同的数据库引擎进行测试(sqlite有更快的数据库创建方式) – 2011-01-06 12:47:54

回答

14

这是可能的,这里有一个办法:

1)定义你自己的测试运行看here怎么看。

2)对于您的自定义测试运行看在default test runner,你可以复制和过去的代码,只是注释此行: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 

3)势必setting.py TEST_RUNNER到您的测试运行。

4)现在运行测试是这样的:./manage.py测试

+0

所以这看起来不错,但我仍然需要建立连接到本地测试数据库没有? – 2011-01-05 21:08:05

+0

@Ryan Detzel:我刚刚编辑了我的答案,以获取更多细节,关于你的问题,我认为测试数据库上面的代码将在第一次运行测试时创建是的,这个测试数据库是由Django自动创建的: http://docs.djangoproject.com/zh/dev/topics/testing/?from=olddocs#the-test-database – mouad 2011-01-05 21:39:10

+0

@mouad,我可以配置它,使它甚至不会加载灯具/冲洗它吗? – 2013-07-16 21:35:42

6

谁在使用Django> = 1.8

python manage.py test --keepdb 

--keepdb果脯测试运行的测试数据库。这具有跳过创建和销毁操作的优点,这可以大大缩短运行测试的时间,尤其是在大型测试套件中。如果测试数据库不存在,它将在第一次运行时创建,然后为每次后续运行保留。在运行测试套件之前,任何未应用的迁移也将应用于测试数据库。

+0

Django 1.6怎么样?有没有类似的方法? – 2016-08-18 06:57:05

相关问题