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, который, кажется, делает трюк.

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