Pytest-django Использовать env vars в settings.py
У меня есть api на Django, который использует довольно много переменных окружения. Идея состоит в том, чтобы добавить pytest-django для тестирования всех его функциональных возможностей (я знаю, что было бы разумнее собрать тесты вместе с проектом).
В настоящее время он находится в файле manage.py, где я загружаю переменные окружения следующим образом:
def main():
dotenv.read_dotenv()
В моем файле api settings.py я использую некоторые из этих переменных окружения следующим образом:
os.environ.get('one_key')
В моем файле pytest.ini я правильно настроил settings.py следующим образом:
DJANGO_SETTINGS_MODULE = api.settings
Проблема в том, что когда я запускаю pytest, я получаю ошибку, что он не находит эти переменные окружения, потому что файл manage.py не был выполнен, и поэтому они не были загружены. Есть ли способ заставить pytest загрузить .env перед запуском тестов и settings.py?
У меня была такая же проблема. Предложение вызвать dotenv.read_dotenv()
из pytest_sessionstart()
в conftest.py
не сработало. Я также попробовал подключить библиотеку pytest-dotenv. Она заставила pytest работать, но сломала мой модуль manage.py (из-за конфликта пространств имен между django-dotenv [который мой manage.py использует для чтения файла .env] и python-dotenv [который является зависимостью pytest-dotenv]).
В итоге я нашел pytest-django-dotenv, который, кажется, делает трюк.