如何使用pytest模拟os.environ?

2023-02-06 13:43:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在使用pytest框架编写的单元测试中模拟os.environ

下面是我要测试的代码的虚拟版本,位于getters.py

import os

username = os.environ['MY_USER']
password = os.environ['MY_PASS']

def get_data(...):

    access_token = request_access_token(username, password)
    ...
    return data

下面是test_getters.py中的单元测试示例:

import pytest
import src.getters

class TestGetData(object):


    def test_something(self):

        data = src.getters.get_data(...)

        assert ...

测试收集失败,出现以下错误:

=========================== short test summary info ============================
ERROR tests/test_getters.py - KeyError: 'MY_USER'
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.68s ===============================

如果可能的话,我希望能够为整个测试类模拟一次

有什么装饰师我可以用吗?或者其他推荐的模拟os.environ的方法


Tags: pytestimportdatagetpytestosmydefenvironusernamepassword单元测试usergetters
1条回答
网友
1楼 · 发布于 2023-02-06 13:43:48

使用Monkeypatchingmonkeypatch.setenv()

文件:

Modifying environment variables for a test e.g. to test program behavior if an environment variable is missing, or to set multiple values to a known variable. monkeypatch.setenv() and monkeypatch.delenv() can be used for these patches.

代码:

import pytest
import src.getters

class TestGetData(object):


    def test_something(self):
        monkeypatch.setenv('MY_USER', 'Nanna')
        monkeypatch.setenv('MY_PASS', 'P@ssw0rd')
        data = src.getters.get_data(...)

        assert ...

相关问题 更多 >