Как правильно хранить параметры аутентификации в базе данных в тестах Python?

Суть: есть у меня класс, который наследует от psycopg2 и предоставляет интерфейс для работы с базой данных, назовем ее, условно "module_name_1". При инициализации она требует параметры БД (хост, имя, лог-пасс юзера). Сейчас я пишу новый проект, новый модуль, новый класс, который работает с БД (назовем ее условно auth_class). Решил auth_class наследовать от своего module_name_1, что бы проще была работа с БД. Написал, затем написал тесты - все работает, как и предполагалось. Но проблема заключается в том, что в самом тесте, при инициализации класса auth_class, требуется передавать все данные БД, что крайне небезопасно... Какое решение используется в подобных случаях, что бы не хардкодить такие данные?


Ответы (1 шт):

Автор решения: Roman Konoval

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

При запуске приложения что в прод режиме, что тестов, устанавливайте значения переменных окружения:

export DATABASE_USERNAME=...
export DATABASE_PASSWORD=...

python my_app.py

Ну а в приложении читайте их:

import os

username = os.environ.get('DATABASE_USERNAME', 'default_username')
password = os.environ.get('DATABASE_PASSWORD', 'default_password')

В тестовой БД обычно нет никаких секретных данных. Так что для тестовой базы имеет смысл использовать значения по умолчанию, чтоб не требовать их установки. А сама тестовая БД обычно создается процедурой подготовки окружения для запуска тестов, в которой они и задаются.

→ Ссылка