Строки подключения для тестирования 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