Строки подключения для тестирования Django с помощью django-environ

На данный момент мы используем django-environ для хранения строки подключения к базе данных. Мы используем mssql-django для подключения к базе данных Microsoft SQL Server.

Строки подключения к тестовой базе данных требуют больше параметров - поэтому существует ли простой способ хранения всего подключения для определенной среды - аля тест? Или, возможно, есть лучший подход?

Код проекта

В этом проекте используется django-environ для загрузки строки подключения из файла .env для определенного окружения в рамках одного файла settings.py. Это задается параметром окружения ENVIRONMENT_FILE.

environments/dev.env

DATABASE_URL=mssql://localhost:1433/ACME_APP_DB

settings.py

import environ

environ.Env.DB_SCHEMES['mssql'] = 'mssql'

env = environ.Env(
    DEBUG=(bool, False)
)

BASE_DIR = Path(__file__).resolve().parent.parent
ENVIRONMENT_DIR = os.path.join(BASE_DIR, "environments")
ENVIRONMENT_FILE = os.environ.get("ENVIRONMENT_FILE", default=".env")
ENVIRONMENT_FILE_FULL_PATH = os.path.join(ENVIRONMENT_DIR, ENVIRONMENT_FILE)
root = environ.Path(__file__) - 3

environ.Env.read_env(ENVIRONMENT_FILE_FULL_PATH)
env = environ.Env()

DATABASES = {
    "default": env.db_url(),
}

Это позволяет нам указать окружение для dev или prod. На данный момент у нас нет тестов. Исследовав это - альтернатива ниже позволяет использовать тестовую базу данных при запуске tests против базы данных.

Альтернатива

Это было альтернативное расследование, которое я провел.

Мы хотим более тонкий контроль, включая драйвер и тестовую базу данных, нам нужно указать дополнительную информацию.

База настроек

Здесь используются настройки settings/base.py с различным набором настроек для dev, test и prod.

manage.py

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings.dev")

settings/test.py

from .base import *

DATABASES = {
    "default": {},
    "acmeapp_db": {
        'ENGINE': 'mssql',
        'NAME': 'acmeapp',
        'HOST': 'localhost',
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
        "TEST": {
            "NAME": "acmeapp_db",
            'DEPENDENCIES': [],
        },
    }

settings/dev.py

from .base import *

DEBUG = True

DATABASES = {
    "default": {},
    "acmeapp_db": {
        'ENGINE': 'mssql',
        'NAME': 'acmedb',
        'HOST': 'mssql-db',
        'PORT': '1433',
        'USER': 'sa',
        'PASSWORD': 'Secret1234',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

Дальнейшее чтение

https://django-environ.readthedocs.io/en/latest/quickstart.html#usage

Вернуться на верх