tox中setenv和passenv有什么区别

问题描述 投票:0回答:2

我设置了要在我的

.gitlab-ci.yml
中与 pytest 结合使用的 tox。 我希望 pytest 在 .gitlab-ci.yml 文件中设置的特定环境下运行

在文档中,我找到了

tox.ini
配置
setenv
passenv
,但我无法理解每种配置的用例是什么。

有什么区别?有哪些用例?即我什么时候想使用 setenv 而不是 passenv ,反之亦然?

pytest gitlab-ci tox
2个回答
0
投票

setenv
用于设置虚拟环境中的环境变量。 (将值设置为虚拟)

passenv
用于将特定的环境变量从外部环境传递到虚拟环境。 (从环境传递到虚拟)


0
投票

setenv
希望您明确设置一个值:

setenv =
  foo=bar

passenv
不需要设置值——它应该从调用 tox 的上下文中
传递
。作为相关背景...如果没有
passenv
,您在调用
tox
之前可能设置的任何环境变量都不会出现在
tox
创建的测试环境中!


例如,我可能有一些我知道可以在本地运行的测试,但在 CI 环境中运行时将无法工作。所以,在 pytest 中,我可能会有这样的东西:

@pytest.mark.skipif(os.environ.get('CI', False), reason="this test won't work in CI")
def test_function():
    ...

在这种情况下,我不想使用

setenv
,因为我仍然希望在本地调用
tox
时运行这些测试,而不是在 CI 中。因此,我为此变量配置
passenv
,以确保变量
CI
(始终存在于 CI 系统中)在 tox 环境中可访问:

passenv =
    CI

在其他情况下,我可能希望每当调用

tox
时始终将变量设置为特定值,例如,
PYTHONUNBUFFERED
变量以确保测试的输出不被缓冲:

setenv =
  PYTHONUNBUFFERED=1
© www.soinside.com 2019 - 2024. All rights reserved.