2015-10-18 45 views
0

运行django测试时创建一个临时数据库非常耗时,所以我有一个想法是为django测试设置一个单独的数据库。可能吗?如果是这样,我该如何实现它?我可以为django测试建立一个数据库吗?

更具体:我不想让django创建一个新的数据库并进行迁移并测试并销毁每一次运行./manage.py测试。我希望它连接到一个现有的数据库(当我已经创建用于测试)并完成所有工作。

回答

4

运行测试时可以使用--keepdb选项,以便数据库在每次运行结束时不被销毁。

./manage.py test --keepdb 
+0

不完全是我想要的,但足够好 –

0

我不确定如果我理解你的问题,但是当我在开发测试时,我只使用SQLite。 SQLite是我的测试数据库。当我把它用于生产时,我使用PostgreSQL。这是当我在开发测试我的settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 

我曾经使用PostgreSQL的测试以及(我切换到SQLite的,因为它是更快的设置)。

如果我与PostgreSQL的测试,我的settings.py应该是这样的:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'TESTDB', 
     'USER': 'mydatabaseuser', 
     'PASSWORD': 'mypassword', 
     'HOST': '127.0.0.1', 
     'PORT': '5432', 
    } 
} 

,当我没有测试,我会使用这样的:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'ProductionDB', 
     'USER': 'mydatabaseuser', 
     'PASSWORD': 'mypassword', 
     'HOST': '127.0.0.1', 
     'PORT': '5432', 
    } 
} 

就像我前面提到过,我开始使用SQLite进行测试,因为它更快。

+2

IMO,你应该总是在生产测试中使用相同类型的数据库,以避免sqlite会让任何问题通过。 –

+0

@limelights确实。在这种情况下,我只需使用两个不同的相同类型的数据库,并在测试时更改settings.py中的数据库。阿拉斯代尔的解决方案似乎更有效率。 – user2719875

相关问题