Pytest: Mocking environment variables
examples/pytest/setenv/app.py
import subprocess def get_python_version(): proc = subprocess.Popen(['python', '-V'], stdout = subprocess.PIPE, stderr = subprocess.PIPE, ) out,err = proc.communicate() if proc.returncode: raise Exception(f"Error exit {proc.returncode}") #if err: # raise Exception(f"Error {err}") if out: return out.decode('utf8') # In Python 3.8.6 else: return err.decode('utf8') # In Python 2.7.18
examples/pytest/setenv/test_app.py
import app import os def test_python(): out = app.get_python_version() assert out == 'Python 3.8.6\n' def test_in_path(monkeypatch): monkeypatch.setenv('PATH', '/usr/bin') out = app.get_python_version() assert out == 'Python 2.7.18\n' print(os.environ['PATH']) print() def test_other(): print(os.environ['PATH']) print() def test_keep(monkeypatch): monkeypatch.setenv('PATH', '/usr/bin' + os.pathsep + os.environ['PATH']) print(os.environ['PATH'])