Я хочу, чтобы моя база данных модульных тестов была полностью отделена от других сред, включая использование других учетных данных пользователя. Это в основном предотвращает непреднамеренный запуск модульных тестов для базы данных разработки и манипулирование данными разработчиков или их полное уничтожение, если не указана опция --keepdb. Приведенный ниже код обнаруживает «тест» в аргументах sys, и это, кажется, работает, но очень неуклюже. Если мне не хватает лучшего способа сделать это, пожалуйста, сообщите.
У меня есть отдельные файлы настроек для каждой среды, так что это будет только на сервере разработки, где модульные тесты запускаются автоматически и не заканчиваются на любых производственных серверах.
Среда: Django 1.11 Python 3.4.x MariaDB
# 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 не смотрит на учетные данные ТЕСТ
# 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',
},
}
}