运行django测试时创建一个临时数据库非常耗时,所以我有一个想法是为django测试设置一个单独的数据库。可能吗?如果是这样,我该如何实现它?我可以为django测试建立一个数据库吗?
更具体:我不想让django创建一个新的数据库并进行迁移并测试并销毁每一次运行./manage.py测试。我希望它连接到一个现有的数据库(当我已经创建用于测试)并完成所有工作。
运行django测试时创建一个临时数据库非常耗时,所以我有一个想法是为django测试设置一个单独的数据库。可能吗?如果是这样,我该如何实现它?我可以为django测试建立一个数据库吗?
更具体:我不想让django创建一个新的数据库并进行迁移并测试并销毁每一次运行./manage.py测试。我希望它连接到一个现有的数据库(当我已经创建用于测试)并完成所有工作。
运行测试时可以使用--keepdb
选项,以便数据库在每次运行结束时不被销毁。
./manage.py test --keepdb
我不确定如果我理解你的问题,但是当我在开发测试时,我只使用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进行测试,因为它更快。
IMO,你应该总是在生产测试中使用相同类型的数据库,以避免sqlite会让任何问题通过。 –
@limelights确实。在这种情况下,我只需使用两个不同的相同类型的数据库,并在测试时更改settings.py中的数据库。阿拉斯代尔的解决方案似乎更有效率。 – user2719875
不完全是我想要的,但足够好 –