首页 > 解决方案 > 为什么在单元测试期间无法读取环境变量?

问题描述

使用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 应该已经对此感到震惊。那么为什么这仍然发生呢?

标签: pythonvisual-studio-codepytest

解决方案


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.


推荐阅读