首页  >  文章  >  后端开发  >  如何在 Python 中模拟请求模块响应

如何在 Python 中模拟请求模块响应

Susan Sarandon
Susan Sarandon原创
2024-10-20 19:47:30854浏览

How to Mock Requests Module Responses in Python

模拟请求来控制响应

在Python中,mock包提供了一种强大的方法来模拟外部模块或类,允许您操作行为并验证交互。在 HTTP 请求的上下文中,模拟请求模块对于测试依赖于外部服务的代码特别有用。

第 1 步:模拟请求模块

至模拟 Requests 模块时,您需要使用返回所需响应的自定义函数来修补 get() 函数。您可以像这样定义一个模拟方法:

<code class="python">def mocked_requests_get(url, **kwargs):
  if url == "aurl":
    return MockResponse("a response")
  elif url == "burl":
    return MockResponse("b response")
  else:
    raise Exception("URL not mocked")</code>

请注意,此方法需要一个有效的 URL 并返回一个 MockResponse 对象,该对象表示具有预定义内容的假装响应。

步骤 2:修补原始请求模块

定义了模拟方法后,您可以使用 @mock.patch 装饰器来修补原始 requests.get() 。这将替换您正在使用模拟行为测试的代码中对 requests.get() 的所有调用。

<code class="python">@mock.patch("requests.get", side_effect=mocked_requests_get)
def test_myview(self, mock_get):
  # Your test goes here</code>

第 3 步:调用查看并验证响应

现在您可以照常调用您的函数并验证是否获得了预期的响应。可以检查模拟对象以断言 get() 函数是使用特定参数调用的并返回所需的值。

示例代码:

<code class="python">import requests
from unittest import mock

class MyViewTest(unittest.TestCase):
    # ...
    def test_myview(self, mock_get):
        self.assertEqual(res1.text, "a response")
        self.assertEqual(res2.text, "b response")
        self.assertEqual(res3.text, "c response")

        # Verify mock calls
        mock_get.assert_called_with('aurl')
        mock_get.assert_called_with('burl')
        mock_get.assert_called_with('curl')</code>

记住验证响应的文本内容以及传递给模拟方法的调用计数和参数。这使您可以确保发生预期的交互并实现预期的行为。

以上是如何在 Python 中模拟请求模块响应的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn