2017-05-05 131 views
2

我知道這個問題有點主觀,但我迷失在這裏做什麼。目前我正在使用Go + Go-kit編寫一些微服務。我想用集成測試類型的方式來測試這些微服務的端點,但我不確定如何去做。我能想到的唯一的事情就是讓shell腳本碰到端點並檢查響應。但這看起來像是混亂,而不是一個真正的聰明的做法。我覺得應該有更好的方法來做到這一點。有沒有人有什麼建議?測試微服務?

+0

這個問題似乎有點寬泛。看來你需要先去做一些研究,然後再回來一些具體的問題。 [這](https://martinfowler.com/articles/microservice-testing/)可能是一個好的開始。 –

回答

0

端對端測試的另一種方法是Consumer-Driven Contract(CDC)。

雖然是有一些終端到終端的測試非常有用,他們也有一些缺點,如:

  • 消費者服務必須知道如何啓動提供商的服務。這聽起來像是不必要的信息,當服務數量開始增加時可能難以維持;

  • 啓動服務可能會很慢。即使我們只談幾秒鐘,也會增加開銷時間。如果消費者依賴於多種服務,這一切都開始累加;

  • 提供者服務可能依賴於數據存儲或其他服務按預期工作。這意味着現在不僅需要啓動提供程序,還需要一些其他服務,可能是數據庫。

CDC的想法描述不久爲:

  1. 消費者定義了它從一個特定的請求到服務
  2. 的提供者和消費者在合同上達成一致預計
  3. 供應商不斷驗證合同是否得到履行

此信息取自here。詳細瞭解這個article,即使它特定於Java,它也會很有用。

0

您可以使用httptest包在標準Go單元測試中執行此操作。這允許您創建可以傳遞給任何HandlerHandleFunc的模擬對象RequestResponseWriter。您創建相應的Request,將其傳遞給您的處理程序,然後從ResponseRecorder中讀取響應,並根據預期的響應進行檢查。

如果您使用默認多路複用器(呼叫http.Handle()註冊處理程序),則可以使用http.DefaultServeMux進行測試。我過去曾將它用於微服務,並取得了良好的效果。適用於基準處理程序,路由和中間件。

0

您應該始終使用golang的原生unit testing framework來測試每個單獨的服務(請勿使用shell腳本!)。 httptest似乎很好,但我認爲它有更好的測試邊界是有幫助的 - 你應該爲你的代碼的每個功能塊真正擁有一個_test.go。較小的測試更容易維護。

就涉及多個微服務的整體集成測試而言,您不應在開發時進行這些測試。設置臨時區域並在那裏運行測試。

我的2美分。