Python 为什么使用monkeypatch.setenv而不是os.putenv

Python 为什么使用monkeypatch.setenv而不是os.putenv,python,environment-variables,pytest,monkeypatching,Python,Environment Variables,Pytest,Monkeypatching,pytest的模块提供了一个setenv函数,该函数将将环境变量名称设置为值。为什么monkeypatch提供此功能?听起来像是?它提供了prepend参数作为一种方便,但这似乎是一个没有足够理由使用新函数来设置环境变量。这是关于删除测试在环境中所做的更改。如果您仅使用os.putenv,或直接修改os.environ,则即使在测试结束后,您的修改仍将保持不变。这意味着运行的下一个测试也将应用更改!由于测试不一定是有序的,这意味着您不再有可重复和可靠的测试执行 单个测试总是不希望能够更改某些全局

pytest的模块提供了一个
setenv
函数,该函数将
将环境变量名称设置为值。
为什么
monkeypatch
提供此功能?听起来像是?它提供了
prepend
参数作为一种方便,但这似乎是一个没有足够理由使用新函数来设置环境变量。

这是关于删除测试在环境中所做的更改。如果您仅使用
os.putenv
,或直接修改
os.environ
,则即使在测试结束后,您的修改仍将保持不变。这意味着运行的下一个测试也将应用更改!由于测试不一定是有序的,这意味着您不再有可重复和可靠的测试执行


单个测试总是不希望能够更改某些全局可变状态,因此,如果需要修改环境变量,可以使用上下文管理器或使用提供的fixture

该文档引用的博客文章对此进行了解释。夹具会记住更改并将其恢复到测试完成时的状态。