python - 为什么在单元测试期间无法读取环境变量?
问题描述
使用vscode + pytest,而测试用例是用unittest编写的,例如:
class MyTest(unittest.TestCase):
def testEnvVar(self):
account = os.getenv("ACCOUNT")
它无法读取ACCOUNT
。但是,os.getenv("ACCOUNT")
如果直接执行,将得到正确的结果python test.py
:
# test.py
import os
print(os.getenv("ACCOUNT"))
确保“ACCOUNT” envar 已设置。
如果被执行pytest tests/test.py
,环境变量也不能被读取,所以它是由pytest引起的。我知道 pytest 会做一些技巧(例如,pytest 将捕获所有控制台/stderr 输出),但我不知道它对 envar 究竟做了什么。和 tox(in tox, 你必须设置一样passenv=*
,所以测试环境可以从 tox 所在的 shell 继承所有环境变量。
我的意思是,我完全理解这是所有与测试相关的工具都可以使用的技巧,我只是不知道如何在 pytest 中禁用它。所以不要暗示我忘记设置变量,或者我的代码错误等。
我知道如何破解这个,通过在 vscode 启动文件中使用模拟或添加 .env 变量。但是,这肯定会在某些文件/设置中暴露帐户/密码。由于帐户和密码是机密,我不想在任何文件中公开它们。
我想这是一个非常普遍的要求,pytest 应该已经对此感到震惊。那么为什么这仍然发生呢?
解决方案
The easiest way is to use https://github.com/MobileDynasty/pytest-env. But I don't think you should test the enviroment variables in your unit tests.
推荐阅读
- .net - 将现有 ASP.NET Core Web 应用更改为面向 .NET Framework 4.x
- r - 将特定的重复列数据转置到给定 ID 的行中 #
- android - 停止持久调试挂钩
- android - 不同的版本或不同的应用程序?
- javascript - 在使用 javaScript 在页面中呈现之前删除 Html 元素?
- java - 当移动到第二个片段时,第一个片段正在显示
- java - JAVA MODBUS 错误
- excel - 如何在 Excel 中创建一个文件,从查询编辑器刷新并处理它
- ionic-framework - 如何在键盘上方放置页脚(Ionic 3)
- r - R Plotly:使用颜色变量时更改绘图颜色