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

Why use monkeypatch.setenv instead of os.putenv

pytest 的 monkeypatch module provides a setenv function which will Set environment variable name to value. Why does monkeypatch provide this? It sounds the same as os.putenv?它提供 prepend 参数是为了方便,但这似乎是一个用于设置环境变量的新函数的弱理由。

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

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