Переменные окружения с pytest и tox

Как я могу проверить переменные окружения, используя pytest и tox?

validate.py

ENV_VAR = os.environ['ENV_VAR']

def validate_env_var(value):
    if value != ENV_VAR:
        raise Exception

test_validate.py

class TestValidateEnvVar:
    def test_validate_env_var_pass(self):
        value = 'valid_env_value'
        os.environ["ENV_VAR"] = value
        validate.validate_env_var(value)

Если я установлю переменные среды в tox.ini файл:

[testenv]
setenv = ENV_VAR=valid_env_value

Тест успешно пройден, но я бы хотел сохранить его изолированным.

2 ответа

Решение

Переменные среды должны быть предоставлены вашим тестом, а не вашим организатором теста. Одним из вариантов является использование макета и патчаos.environ, В качестве альтернативы вы можете просто предоставить переменные окружения в вашем тестовом примере setUp() и сбросьте их в tearDown(),

У меня была проблема с ENV_VAR переменная устанавливается до запуска теста. validate модуль должен быть перезагружен в тесте для правильной работы с использованием imp.reload

test_validate.py

import mock
from imp import reload
class TestValidateEnvVar:
    @mock.patch.dict(os.environ, {"ENV_VAR": "valid_env_value"}
    def test_validate_env_var_pass(self):
        reload(validate)
        value = 'valid_env_value'
        os.environ["ENV_VAR"] = value
        validate.validate_env_var(value)
Другие вопросы по тегам