2017-01-02 49 views
0

如何使用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 

測試通過,但我想保持測試隔離。

+0

你的意思是你想清理ENV。測試後的變量是否正確? –

+0

對於這種情況下,我試圖讓測試通過,而不使用tox.ini文件設置環境變量。 – JohnBoy

回答

2

環境變量應該由您的測試提供,而不是由您的測試運行者提供。一種選擇是使用mockpatch os.environ。或者,您可以在測試用例的setUp()中提供環境變量,並將其重置爲tearDown()

0

在測試運行之前,我遇到了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)