模拟请求来控制响应
在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中文网其他相关文章!