Как правильно хранить параметры аутентификации в базе данных в тестах Python?
Суть: есть у меня класс, который наследует от psycopg2 и предоставляет интерфейс для работы с базой данных, назовем ее, условно "module_name_1". При инициализации она требует параметры БД (хост, имя, лог-пасс юзера). Сейчас я пишу новый проект, новый модуль, новый класс, который работает с БД (назовем ее условно auth_class). Решил auth_class наследовать от своего module_name_1, что бы проще была работа с БД. Написал, затем написал тесты - все работает, как и предполагалось. Но проблема заключается в том, что в самом тесте, при инициализации класса auth_class, требуется передавать все данные БД, что крайне небезопасно... Какое решение используется в подобных случаях, что бы не хардкодить такие данные?
Ответы (1 шт):
Передавайте параметры конфигурации приложения, а имя пользователя и пароль к БД ими являются, в переменных окружения. Так они не будут фигурировать в коде приложения.
При запуске приложения что в прод режиме, что тестов, устанавливайте значения переменных окружения:
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')
В тестовой БД обычно нет никаких секретных данных. Так что для тестовой базы имеет смысл использовать значения по умолчанию, чтоб не требовать их установки. А сама тестовая БД обычно создается процедурой подготовки окружения для запуска тестов, в которой они и задаются.