Python 如何使用pytest模拟请求?

Python 如何使用pytest模拟请求?,python,pytest,Python,Pytest,我正在编写一些单元测试代码,我想模拟函数中使用的请求模块: import requests def get_employee(id): resp = requests.get(f'{__BASE_URL}/employee/{id}') if resp.status_code == 404: return None return resp.json() 我尝试使用以下代码模拟它: def test_get_employee(mocker):

我正在编写一些单元测试代码,我想模拟函数中使用的
请求
模块:

import requests

def get_employee(id):
    resp = requests.get(f'{__BASE_URL}/employee/{id}')
    if resp.status_code == 404:
        return None

    return resp.json()
我尝试使用以下代码模拟它:

def test_get_employee(mocker):
    get_request_mock = mocker.patch.object(get_employee, "resp")
    print(get_request_mock)
    get_request_mock.status_code = 200
    get_request_mock.json.return_value = {'name': 'awesome-mock'}
    resp = get_employee('random-id')
    assert resp == {'name': 'awesome-mock'}
如何使用mocker模拟请求?有可能吗?

您可以使用(),有一个用于pytest的方法

例如:

来自correct.package import\uuuu BASE\uURL
从请求导入HTTPError
def测试获取员工(请求模拟):
test_id='random id'
请求\u mock.get(f'{uu BASE\u URL}/employee/{test\u id}',json={'name':'awesome mock'})
resp=get_employee('random-id'))
assert resp=={'name':'awesome mock'}
def测试缺席员工(请求模拟):
test\u id='不存在'
请求\u mock.get(f'{uuuuu BASE\u URL}/employee/{test\u id}',状态\u code=404)
使用pytest.raises(HTTPError):
resp=获取员工(测试id)
这可能会有所帮助

from unittest import TestCase

import requests
import requests_mock


class TestHTTPRequest(TestCase):
    def test_context_manager(self):
        with requests_mock.Mocker() as mock_request:
            mock_request.get("http://123-fake-api.com", text="Hello!")
            response = requests.get("http://123-fake-api.com")

        assert response.text == "Hello!"

但是如何模拟行
请求。从函数
get\u employee(id)
获取(f'{uu BASE\u URL}/employee/{id}')
?是否可以返回404?是的。只需添加一个
status=404
作为
get
函数的参数。到底什么是正确的?在任何地方都找不到它。@Zizzipupp我认为来自correct.package import的
\uuuu BASE\u URL
是指在项目的包中找到您试图模拟的资源的基本URL。我假设它可以在配置模块的某个地方找到。这个答案没有使用问题中明确要求的
pytest