这实在是难倒了我。当我将 API 密钥设置为环境变量,然后尝试使用使用此 API 密钥的 unittest 运行测试时,该测试无法访问该 API 密钥。我不想在测试本身中设置环境变量,因为该值是秘密的,并且我不希望它被我的 VCS 意外跟踪。
$ export API_KEY=hunter2
$ python -m unittest discover tests
ERROR: setUpClass (tests_system.TestInit)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/travis/build/jamesbrunet/callhub-python-wrapper/callhub/auth.py", line 23, in __init__
self.api_key = os.environ["API_KEY"]
File "/home/travis/virtualenv/python3.5.6/lib/python3.5/os.py", line 725, in __getitem__
raise KeyError(key) from None
KeyError: 'API_KEY'
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我只运行一个测试文件,python test-file.py它就会成功执行并且可以访问 API 密钥。我只有在使用时才会遇到这个问题python -m unittest discover <directory of test file>。不幸的是,我需要使用后一个命令来发现目录中的所有测试文件。
unittest 的文档没有引用环境变量,所以我对这里发生的事情有点不知所措。
编辑:我在本地计算机上做了一些额外的测试,这个问题的范围似乎仅限于在 PyCharm 和 Travis 中运行这些命令。这两者都使用虚拟环境。也许这与 @AndrewAllaire 对这篇文章的评论有关?