簡體   English   中英

Python請求-模擬狀態代碼和響應

[英]Python Requests - Mock status code and response

因此,我正在為Python項目編寫一些單元測試,並且希望模擬對外部API的響應。

我的代碼如下所示:

r = my_api_client.get(myurl)

try:
    if r.status_code == 200:
        my_response = r.json()
    elif r.status_code != 200:
        print "bad status code"
except Exception as e:
    raise

for x in my_response:
    ...

我的問題是如何模擬my_api_client以返回正確的狀態碼和json對象?

我一直在嘗試類似my_api_client = mock.Mock(return_value={'status_code':200, 'json_obj': {'blah':'blah'}})

謝謝你的幫助

您可以為響應編寫一個復雜的模擬,如下所示:

ok_response_mock = mock.MagicMock()
type(ok_response_mock).status_code = mock.PropertyMock(return_value=200)
ok_response_mock.json.return_value = "{'blah':'blah'}"

這將創建一個MagicMock(在詢問使用非指定方法時不會抱怨),向其添加status_code屬性,該屬性返回200。並配置對.json()方法的JSON字符串響應。

因此,如果my_api_client是您的測試方法中的參數:

my_api_client_mock = mock.MagicMock()
my_api_client_mock.get.return_value = ok_response_mock
YourModule.YourMethod(my_api_client_mock)

這將創建模擬參數,將其連接到先前創建的模擬響應並調用測試方法。 相反,如果my_api_client是導入的模塊:

@mock.patch('MyModuleUnderTest.my_api_client')
def test_MyMethodUnderTest__response_ok__stuff_happens(self, api_client_mock):
   # code to create ok_response_mock
   api_client_mock.get.return_value = ok_response_mock

這將使用為您自動創建並作為測試方法參數的模擬程序對導入的模塊進行修補。 只需告訴該模擬返回模擬響應即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM