Spring Cloud Contract 簡介

Spring Cloud Contract 將 TDD 提升到軟體架構層面。它允許您執行消費者驅動和生產者驅動的契約測試。

歷史

在成為 Spring Cloud Contract 之前,這個專案叫做 Accurest。它由 (Codearte) 的 Marcin GrzejszczakJakub Kubrynski 建立。

0.1.0 版本於 2015 年 1 月 26 日釋出,並於 2016 年 2 月 29 日釋出 1.0.0 版本後趨於穩定。

為什麼需要它?

假設我們有一個由多個微服務組成的系統,如下圖所示

Microservices Architecture

測試問題

如果我們要測試前一節圖中左上角的應用程式,以確定它是否可以與其他服務通訊,我們可以做以下兩件事之一

  • 部署所有微服務並執行端到端測試。

  • 在單元和整合測試中模擬其他微服務。

兩者都有其優點,但也有很多缺點。

部署所有微服務並執行端到端測試

優點

  • 模擬生產環境。

  • 測試服務之間的實際通訊。

缺點

  • 要測試一個微服務,我們必須部署六個微服務、幾個資料庫和其他專案。

  • 執行測試的環境被鎖定,只能用於單個測試套件(在此期間,其他任何人都無法執行測試)。

  • 它們執行時間很長。

  • 反饋來得非常晚。

  • 它們極難除錯。

在單元和整合測試中模擬其他微服務

優點

  • 它們提供非常快速的反饋。

  • 它們沒有基礎設施要求。

缺點

  • 服務實現者建立的存根可能與現實無關。

  • 你可以使用透過的測試上線生產環境,但生產環境可能出現故障。

為了解決上述問題,Spring Cloud Contract 應運而生。其主要思想是為您提供非常快速的反饋,而無需設定整個微服務世界。如果您使用存根,那麼您唯一需要的應用程式就是您的應用程式直接使用的那些。下圖顯示了存根與應用程式的關係

Stubbed Services

Spring Cloud Contract 確保您使用的存根是由您呼叫的服務建立的。此外,如果您可以使用它們,則意味著它們已透過生產方的測試。簡而言之,您可以信任這些存根。

目的

Spring Cloud Contract 的主要目的是

  • 確保 HTTP 和訊息存根(在開發客戶端時使用)與實際伺服器端實現的功能完全一致。

  • 推廣 ATDD(驗收測試驅動開發)方法和微服務架構風格。

  • 提供一種釋出合同變更的方法,這些變更可以立即在雙方可見。

  • 生成用於伺服器端的樣板測試程式碼。

預設情況下,Spring Cloud Contract 整合 Wiremock 作為 HTTP 伺服器存根。

Spring Cloud Contract 的目的不是開始在合同中編寫業務功能。假設我們有一個欺詐檢查的業務用例。如果一個使用者可能因 100 種不同的原因被認定為欺詐,我們假設您會建立兩個合同,一個用於正面情況,一個用於負面情況。合同測試用於測試應用程式之間的合同,而不是模擬完整的行為。

什麼是合同?

作為服務的消費者,我們需要明確定義我們想要實現什麼。我們需要制定我們的期望。這就是我們編寫合同的原因。換句話說,合同是對 API 或訊息通訊應該如何進行的約定。請看以下示例

假設您想要傳送一個請求,其中包含客戶公司的 ID 和它希望向我們借貸的金額。您還希望使用 PUT 方法將其傳送到 /fraudcheck URL。以下列表顯示了檢查客戶是否應被標記為欺詐的 Groovy 和 YAML 合同

期望合同來自受信任的來源。您絕不應該下載或與來自不受信任位置的合同進行互動。
© . This site is unofficial and not affiliated with VMware.