模擬請求來控制回應
在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中文網其他相關文章!