簡體   English   中英

如何使用Python測試API客戶端?

[英]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.

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