我不喜欢使用不同的数据库 (SQLite) 进行测试的想法,因此我的单元测试使用与生产应用程序相同的数据库 - postgres。
开箱即用,这使得创建/销毁数据库成为运行测试中最慢的步骤。
Django 1.8 将使用--keepdb flag 解决这个问题
但我们还没有到达那里,所以我们必须通过其他方式凑合。
您可以使用它来运行您的测试,而无需重新创建数据库。有用。
如果你只关心在命令行上运行测试,我建议这样做。
就我而言,我喜欢使用 PyCharm IDE,并且能够通过右键单击文件/方法来运行测试对我来说绝对是一个加分项,所以我不得不...
解决方案 2) TEST_MIRROR 技巧。
在您的 settings.py 文件中,配置您的数据库,如下所示:
if os.getenv('USE_TEST_DB') == '1':
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydbtesting',
'USER': 'mydb',
'PASSWORD': 'mydb',
'HOST': 'localhost',
'PORT': '5432',
'TEST_MIRROR': 'default',
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'mydb',
'PASSWORD': 'mydb',
'HOST': 'localhost',
'PORT': '5432',
}
}
因此,“mydb”是用于正常执行的数据库,“mydbtesting”用于测试。
TEST_MIRROR 设置实际上并不是为了这个,但事实是,如果您使用这样配置的数据库运行测试,Django 将不会重新创建/销毁我们想要的。
但首先我们必须使用以下内容创建该数据库:
export USE_TEST_DB=1
./manage.py syncdb --migrate
然后,只要您想快速运行测试,只需将USE_TEST_DB 环境变量设置为“1”。
要在 Pycharm 上获得同样的好处,您可以转到运行/调试配置、默认值/Django 测试,然后在环境变量上,添加 USE_TEST_DB = 1
更新:
示例应用在 Github 上:https://github.com/freedomsponsors/www.freedomsponsors.org/blob/099ec1a7a1c404eba287d4c93d58c8cf600b2769