当前位置: 首页 > 知识库问答 >
问题:

如何使用Pytest模拟请求?[副本]

罗智志
2023-03-14

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

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'}

共有1个答案

庄瀚玥
2023-03-14

您可以使用requests-mock(PyPI),这里有一个用于pytest用法的fixture。

对于您的示例:

from correct.package import __BASE_URL
from requests import HTTPError


def test_get_employee(requests_mock):
    test_id = 'random-id'
    requests_mock.get(f'{__BASE_URL}/employee/{test_id}', json= {'name': 'awesome-mock'})
    resp = get_employee('random-id')
    assert resp == {'name': 'awesome-mock'}

def test_absent_employee(requests_mock):
    test_id = 'does_not_exist'
    requests_mock.get(f'{__BASE_URL}/employee/{test_id}', status_code=404)
    with pytest.raises(HTTPError):
        resp = get_employee(test_id)
 类似资料:
  • 似乎有很多不同的方法可以做到这一点,但我试图只使用sinon,sinon-test,chai/mocha,axios,httpmock模块。我无法成功模拟使用axios进行的GET调用。我希望能够模拟来自axios调用的响应,这样单元测试实际上就不必发出外部API请求。 我尝试过通过创建沙箱来建立一个基本的单元测试,并使用sinon stub来建立一个GET调用并指定预期的响应。我不熟悉JavaS

  • 我在JUnit中使用Mockito,并且我有一个使用RestTemboard向微服务发出请求的方法。 此方法返回一个JSON对象,该对象将在TokenRequestorPayload类中反序列化。 当我执行单元测试时,它们会失败,因为mock不起作用,我得到了一个org.springframework.web.client.ResourceAccessExcure。我怎么能嘲笑我的RestTem板

  • 我正在尝试使用pip安装请求模块,但我不确定我是否做得对。我在windows上打开命令提示符(windows key r,输入“cmd”并按回车键)。我已经安装了pip,但当我在命令提示符下输入“pip安装请求”时,它会说 当我去检查是否安装了pip时,就会出现这种情况 然后,我将python的路径添加到环境变量中,更改顶部和底部,希望命令提示符可以运行python程序。但当我转到命令提示符并键入

  • 在我的views.py中,我有一个函数,它每次使用不同的响应来调用各种requests.get() 在我的测试类中,我想做这样的事情,但无法计算出确切的方法调用 步骤1: 验证响应包含“a response”、“b response”、“c response” 如何完成步骤1(模拟请求模块)?

  • 问题内容: 我有与请求对象或用户对象进行交互的Django代码。例如: 如果要使用django python shell进行测试或在单元测试中进行测试,您将在其中传递什么?这里只是一个User对象即可,但是对模拟请求对象的需求也经常出现。 对于外壳或单元测试: 您如何嘲笑用户? 您如何模拟请求? 问题答案: 对于请求,我将使用Django随附的RequestFactory。 对于用户,我将按照@o

  • 问题内容: 我正在做一个项目,其中我的解析器 窃取了 有关特定站点上每个视频的数据,并将其保存到我的数据库中。除了指向隐藏视频的完整链接之外,我已完成所有工作。 有一个播放器,它会自动从页面加载开始。我发现启动播放器的JavaScript代码: 通话后,因此,如果没有错误发现它开始使用播放器 的文件名 从 响应 。那就是我所需要的。 我重新检查了 Live HTTP标头中 的呼叫: 因此它使用特定