Python 測試的模擬請求和回應
在Python 測試中,有必要模擬模組及其功能來控制執行流程並驗證具體場景。其中,模擬 requests 模組通常用於測試依賴 HTTP 請求的函數或方法。
考慮一個包含以下程式碼的views.py 檔案:
def myview(request):
res1 = requests.get('aurl')
res2 = request.get('burl')
res3 = request.get('curl')
要模擬此行為,您可以使用 Python 模擬套件。以下是逐步實現它的方法:
第 1 步:定義模擬行為
要模擬 requests 模組,請定義一個函數來取代 requests.get ()。在此函數中,您可以為每個 URL 指定所需的回應。
def mocked_requests_get(*args, **kwargs):
class MockResponse:
def __init__(self, json_data, status_code):
self.json_data = json_data
self.status_code = status_code
def json(self):
return self.json_data
if args[0] == 'aurl':
return MockResponse({'a': 'a'}, 200)
elif args[0] == 'burl':
return MockResponse({'b': 'b'}, 200)
elif args[0] == 'curl':
return MockResponse({'c': 'c'}, 200)
return MockResponse(None, 404)
第2步:修補請求模組
在您的測試案例中,使用mock.patch()裝飾器取代實際請求帶有您的模擬函數的模組。
@mock.patch('requests.get', side_effect=mocked_requests_get)
def test_myview(self, mock_get):
# Call the function you want to test
myview(None)
# Assertions for expected responses
...
第 3 步:驗證斷言
在測試函數中,您可以使用斷言來驗證是否傳回了預期的回應。
self.assertEqual(mock_get.call_args_list[0][0][0], 'aurl')
self.assertEqual(mock_get.call_args_list[1][0][0], 'burl')
self.assertEqual(mock_get.call_args_list[2][0][0], 'curl')
透過執行下列步驟,您可以有效地模擬 HTTP 請求並控制 Python 測試場景中的回應。這使您可以隔離和測試特定功能,同時確保外部相依性不會幹擾您的結果。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3