使用pytest和tox的环境变量

时间:2017-01-02 16:45:28

标签: python 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 个答案:

答案 0 :(得分:3)

环境变量应由您的测试提供,而不是由您的测试运行员提供。一种选择是使用mockpatch os.environ。或者,您可以在测试用例setUp()中提供环境变量,并在tearDown()中重置它们。

答案 1 :(得分:2)

在测试运行之前,我遇到了ENV_VAR变量设置的问题。 必须在测试中重新加载validate模块才能使用imp.reload

正常工作

test_validate.py

import mock
from imp import reload
class TestValidateEnvVar:
    @mock.patch.dict(os.environ, {"ENV_VAR": "env_value"})
    def test_validate_env_var_pass(self):
        reload(validate)
        value = 'env_value'
        os.environ["ENV_VAR"] = value
        validate.validate_env_var(value)