Как выбрать необходимую базу данных для Pytest? У меня их 2 - одна удаленная, другая локальная. Мне нужно, чтобы pytest запускался на локальной.
По умолчанию используется облачная база данных. И когда pytest пытается создать временные данные, он получает ошибку разрешений. Поэтому я хочу создать вторую базу данных для использования с pytest. Как я могу выбрать эту базу данных в конфигурации pytest?
DATABASES = {
'default': {
'NAME': config['database']['name'],
'ENGINE': '...',
},
'tests_db': {
"NAME": "tests_db",
"ENGINE": 'django.db.backends.sqlite3',
}
}
Я нашел решение. Для такого рода проблемы мы должны создать другую базу данных
DATABASES = {
'default': {
'NAME': config['database']['name'],
'ENGINE': '...',
},
'tests_db': {
'NAME': config['database']['name'],
'ENGINE': 'django.db.backends.sqlite3',
}
}
А затем в conftest.py мы добавляем
pytestmark = [pytest.mark.django_db(databases=["tests_db"])]
Я предпочитаю иметь отдельные настройки для разработки и производства. Мой продакшн не засоряется sqlite базой данных без причины, и я могу ускорить тесты с меньшей безопасностью/другими преимуществами.
settings/
│ base.py
│ heroku.py
│ test.py
# settings/test.py
...
# Make password hashing faster
PASSWORD_HASHERS = ('django.contrib.auth.hashers.MD5PasswordHasher',)
# Use sqlite database
DATABASES = {
'default': {
'NAME': config['database']['name'],
'ENGINE': 'django.db.backends.sqlite3',
}
}
Затем измените DJANGO_SETTINGS_MODULE
на "settings.test"
во время тестов. Если вы используете pytest с pytest-django, вы можете сделать так:
# setup.cfg
[tool:pytest]
addopts = --reuse-db --ds=settings.test