Spring Cloud Contract 簡介
Spring Cloud Contract 將 TDD 提升到軟體架構層面。它允許您執行消費者驅動和生產者驅動的契約測試。
歷史
在成為 Spring Cloud Contract 之前,這個專案叫做 Accurest。它由 (Codearte) 的 Marcin Grzejszczak 和 Jakub Kubrynski 建立。
0.1.0 版本於 2015 年 1 月 26 日釋出,並於 2016 年 2 月 29 日釋出 1.0.0 版本後趨於穩定。
測試問題
如果我們要測試前一節圖中左上角的應用程式,以確定它是否可以與其他服務通訊,我們可以做以下兩件事之一
-
部署所有微服務並執行端到端測試。
-
在單元和整合測試中模擬其他微服務。
兩者都有其優點,但也有很多缺點。
部署所有微服務並執行端到端測試
優點
-
模擬生產環境。
-
測試服務之間的實際通訊。
缺點
-
要測試一個微服務,我們必須部署六個微服務、幾個資料庫和其他專案。
-
執行測試的環境被鎖定,只能用於單個測試套件(在此期間,其他任何人都無法執行測試)。
-
它們執行時間很長。
-
反饋來得非常晚。
-
它們極難除錯。
在單元和整合測試中模擬其他微服務
優點
-
它們提供非常快速的反饋。
-
它們沒有基礎設施要求。
缺點
-
服務實現者建立的存根可能與現實無關。
-
你可以使用透過的測試上線生產環境,但生產環境可能出現故障。
為了解決上述問題,Spring Cloud Contract 應運而生。其主要思想是為您提供非常快速的反饋,而無需設定整個微服務世界。如果您使用存根,那麼您唯一需要的應用程式就是您的應用程式直接使用的那些。下圖顯示了存根與應用程式的關係
Spring Cloud Contract 確保您使用的存根是由您呼叫的服務建立的。此外,如果您可以使用它們,則意味著它們已透過生產方的測試。簡而言之,您可以信任這些存根。
目的
Spring Cloud Contract 的主要目的是
-
確保 HTTP 和訊息存根(在開發客戶端時使用)與實際伺服器端實現的功能完全一致。
-
推廣 ATDD(驗收測試驅動開發)方法和微服務架構風格。
-
提供一種釋出合同變更的方法,這些變更可以立即在雙方可見。
-
生成用於伺服器端的樣板測試程式碼。
預設情況下,Spring Cloud Contract 整合 Wiremock 作為 HTTP 伺服器存根。
| Spring Cloud Contract 的目的不是開始在合同中編寫業務功能。假設我們有一個欺詐檢查的業務用例。如果一個使用者可能因 100 種不同的原因被認定為欺詐,我們假設您會建立兩個合同,一個用於正面情況,一個用於負面情況。合同測試用於測試應用程式之間的合同,而不是模擬完整的行為。 |