繁体   English   中英

为什么在单元测试期间无法读取环境变量?

[英]why can't read environment variables during unittest?

使用vscode + pytest,而测试用例是用unittest编写的,例如:

class MyTest(unittest.TestCase):
    def testEnvVar(self):
        account = os.getenv("ACCOUNT")

它无法读取ACCOUNT 但是,如果直接由python test.py执行, os.getenv("ACCOUNT")将得到正确的结果:

# test.py
import os
print(os.getenv("ACCOUNT"))

确保已经设置了“帐户”环境。

如果由pytest tests/test.py执行,则环境pytest tests/test.py也无法读取,因此是由 pytest 引起的。 我知道 pytest 会做一些技巧(例如,pytest 将捕获所有控制台/stderr 输出),但我不知道它究竟对 envar 做了什么。 与 tox 相同(在 tox 中,您必须设置passenv=* ,因此测试环境可以从 tox 所在的 shell 继承所有环境变量。

我的意思是,我完全理解这是所有与测试相关的工具都可以制作的技巧,我只是不知道如何在 pytest 中禁用它。 所以不要暗示我忘记了设置变量,或者我的代码是错误的等等。

我知道如何破解这个,通过在 vscode 启动文件中使用模拟或添加 .env 变量。 但是,这肯定会在某些文件/设置中公开帐户/密码。 由于帐户密码是秘密,我不想在任何文件中公开它们。

我想这是一个非常普遍的要求,pytest 应该已经意识到了这一点。 那么为什么这仍然发生呢?

最简单的方法是使用https://github.com/MobileDynasty/pytest-env 但我认为您不应该在单元测试中测试环境变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM