Переменные окружения с 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)