[英]How do I test an API Client with Python?
我正在為一個流行的API工作的客戶端庫。 目前,我對所述客戶端的所有單元測試都是針對測試帳戶進行實際的API調用。
這是一個例子:
def test_get_foo_settings(self):
client = MyCustomClient(token, account)
results = client.get_foo_settings()
assert_is(type(results), list)
我想停止針對我的測試帳戶進行實際的API調用。
我應該怎么解決這個問題? 我應該使用模擬來模擬對客戶端的響應和響應嗎?
此外,我對使用此客戶端庫測試的內容的理念感到困惑。 我對測試實際的API不感興趣,但是當涉及到不同的因素時,例如調用的方法,可能的返回結果的排列等等 - 我不確定我應該測試什么和/或何時安全做出假設(例如模擬的回應)。
在我的場景類型中如何使用Mock的任何方向和/或樣本將不勝感激。
我個人會首先創建一個單獨的接口或函數調用,庫用來實際聯系服務,然后在測試期間為它編寫一個自定義模擬。
例如,如果服務使用HTTP並且您正在使用請求來聯系服務:
class MyClient(…):
def do_stuff(self):
result = requests.get(self.service_url + "/stuff")
return result.json()
我會首先圍繞請求編寫一個小包裝器:
class MyClient(…):
def _do_get(self, suffix):
return requests.get(self.service_url + "/" + suffix).json()
def do_stuff(self):
return self._do_get("stuff")
然后,為了測試,我會模擬相關的功能:
class MyClientWithMocks(MyClient):
def _do_get(self, suffix):
self.request_log.append(suffix)
return self.send_result
並在這樣的測試中使用它:
def test_stuff(self):
client = MyClientWithMocks(send_result="bar")
assert_equal(client.do_stuff(), "bar")
assert_contains(client.request_log, "stuff")
另外,編寫測試以便您可以針對模擬和實際服務運行它們可能是有利的,這樣如果事情開始失敗,您可以快速找出它的錯誤。
我正在使用HTTmock,我很滿意它: https : //github.com/patrys/httmock
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.