Как выбрать необходимую базу данных для 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
Вернуться на верх