介紹 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
版本時變得穩定。
測試問題
如果我們想測試上一節圖片左上角的應用程式,以確定它是否能與其他服務通訊,我們可以做以下兩件事中的一件
-
部署所有微服務並執行端到端測試。
-
在單元測試和整合測試中模擬其他微服務。
兩者都有其優點,但也有許多缺點。
部署所有微服務並執行端到端測試
優點
-
模擬生產環境。
-
測試服務之間的真實通訊。
缺點
-
為了測試一個微服務,我們必須部署六個微服務、幾個資料庫以及其他項。
-
測試執行的環境會被鎖定,僅用於一套測試(在此期間,其他人將無法執行測試)。
-
它們執行時間很長。
-
反饋來得非常晚。
-
它們極其難以除錯。
在單元測試和整合測試中模擬其他微服務
優點
-
它們提供非常快的反饋。
-
它們沒有基礎設施要求。
缺點
-
服務實現者建立的 stub 可能與實際情況毫無關係。
-
即使測試通過了,生產環境仍可能失敗,而您可能會帶著透過的測試上線。
為了解決上述問題,Spring Cloud Contract 應運而生。其主要思想是為您提供非常快速的反饋,而無需搭建整個微服務環境。如果您使用 stub 進行開發,那麼您唯一需要的應用程式是您自己的應用程式直接使用的那些。下圖展示了 stub 與應用程式的關係

Spring Cloud Contract 讓您確信所使用的 stub 是由您呼叫的服務建立的。此外,如果您能夠使用它們,這意味著它們已經在生產者端進行了測試。簡而言之,您可以信任這些 stub。
目的
Spring Cloud Contract 的主要目的包括
-
確保 HTTP 和訊息傳遞 stub(在開發客戶端時使用)與實際的伺服器端實現完全一致。
-
推廣 ATDD(驗收測試驅動開發)方法和微服務架構風格。
-
提供一種釋出契約變更的方式,使雙方能夠立即看到變更。
-
生成可在伺服器端使用的樣板測試程式碼。
預設情況下,Spring Cloud Contract 與 Wiremock 整合,作為 HTTP 伺服器 stub。
Spring Cloud Contract 的目的不是開始在契約中編寫業務功能。假設我們有一個欺詐檢查的業務用例。如果使用者可能因 100 種不同原因而被視為欺詐,我們假設您會建立兩個契約,一個用於正面情況,一個用於負面情況。契約測試用於測試應用程式之間的契約,而不是模擬完整行為。 |