【发布时间】:2020-06-19 15:42:53
【问题描述】:
我想让我的单元测试数据库与其他环境完全分开,包括使用不同的用户凭据。这主要是为了防止任何人无意中对开发数据库运行单元测试,并在未指定 --keepdb 选项的情况下破坏开发数据或将其完全清除。下面的代码检测到 sys args 中的“测试”,这似乎有效,但非常笨重。如果我错过了更好的方法,请告知。
我对每个环境都有单独的设置文件,所以这只会在自动运行单元测试的开发服务器上,不会在任何生产服务器上结束。
环境: 姜戈 1.11 Python 3.4.x 玛丽亚数据库
# this works but is clunky
import sys
if 'test' in sys.argv:
DATABASES = { # test db and user
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dev_db_test',
'USER': 'test_user',
'PASSWORD': 'secretpassword',
'HOST': 'the-db-host',
'PORT': '3306',
'TEST': { # redundant but explicit!
'NAME':'dev_db_test',
},
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dev_db',
'USER': 'dev_db_user',
'PASSWORD': 'dev_password',
'HOST': 'the-db-host',
'PORT': '3306',
'TEST': {
'NAME':'dev_db_test', # redundant but explicit!
},
}
}
我想这样做,但不幸的是 Django 不查看 TEST 凭据
# cleaner approach but doesn't work - don't do this!
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dev_db',
'USER': 'dev_db_user',
'PASSWORD': 'dev_password',
'HOST': 'the-db-host',
'PORT': '3306',
'TEST': {
'NAME':'dev_db_test', # Django uses the test db NAME
'USER':'test_user_ignored', # but ignores the USER and PASSWORD
'PASSWORD':'ignoredpassword',
},
}
}
【问题讨论】:
标签: python django django-testing