1 回答

TA貢獻1810條經驗 獲得超5個贊
問題本身有些事情看起來不對勁,我會盡力澄清
沒有必要保留兩個 Spring Boot 應用程序:一個src/test
在src\main
.?如果你確實需要使用兩個不同的微服務——至少使用兩個 maven 模塊:
??project ??|___?app1 ??|??????|__?src/main/java?-?app1?production?code?is?here ??|??????|__?src/test/java?-?app1?tests?are?here ??|??????|__?pom.xml ??|___?app2?????? ??|??????|__?src/main/java?-?app2?production?code?is?here ??|??????|__?src/test/java?-?app2?tests?are?here ??|??????|__?pom.xml ??|__?pom.xml
現在 Spring Boot 很好地支持在@SpringBootTest
注釋的幫助下運行一個微服務,注釋基本上試圖在測試中模擬 Spring Boot 微服務的啟動(具有配置管理、組件掃描等) 。并且由于 spring 配置緩存功能,您可以在測試用例之間重用相同的應用程序上下文。
通常 spring universe 中的集成測試測試一個特定的微服務,該微服務能夠模擬出它的一些 bean,這些 bean 可以為外部組件提供集成點。
然而,如果你想運行 2 個應用程序,你可能需要一個完整的“系統測試”,因為你測試了這些組件之間的交互。這有點超出了 spring 本身的范圍,它存在于一個 JVM 中并服務于一個進程(應用程序)。
因此,假設每個測試都是出于明確的特定原因而完成的,首先,問問自己到底想測試什么?
例如,如果您想測試應用程序 1 的內部邏輯,也許您根本不應該啟動應用程序 2。例如,如果 app1 通過 HTTP/Rest 與 app2 交互,也許你應該使用某種模擬服務器,比如wiremock?或者,在 mockito 中模擬與該服務器交互的 bean,或者使用 Internal Spring Test 的模擬服務器來表示一個例如這里的遠程應用程序
這適用于大多數情況。
現在,如果您真的需要一個系統測試來檢查可能涉及許多應用程序的“業務流程”,請做好準備,有一天您將不得不創建另一個應用程序,然后測試將變得更加復雜。也許您應該考慮創建一個包含所有微服務的測試環境并從那里運行測試套件。然后自動化使用一些腳本創建環境并運行此腳本以創建環境并在其上運行測試,然后刪除環境。您還需要關心(如果)您擁有的所有數據庫、配置管理等。我建議與您工作場所的 Devops 人員討論這個問題,他們可能會幫助您解決這個問題。你也可以和你的 QA 部門談談,詢問項目的自動化,這可能是一項非常有趣的任務,通常每個公司都以自己的方式解決它。
如果您仍然需要從 maven 運行它,現在如何組織代碼。
我會把系統測試放在一個單獨的模塊中(因為它們實際上既不屬于 app1 也不屬于 app2):
??project ??|___?app1 ??|??????|__?src/main/java?-?app1?production?code?is?here ??|??????|__?src/test/java?-?app1?tests?are?here ??|??????|__?pom.xml ??|___?app2?????? ??|??????|__?src/main/java?-?app2?production?code?is?here ??|??????|__?src/test/java?-?app2?tests?are?here ??|??????|__?pom.xml ??|__?test-module ??|???|__pom.xml?//depends?on?app1,?app2 ??|???|__?src/test/java?-?all?system?tests?are?here? ??|__?pom.xml
然后使這個模塊同時依賴于 app1 和 app2,以便它們首先編譯。然后考慮到當 Maven 構建此模塊時,app1 和 app2 的工件已準備就緒。
Maven 的默認生命周期有一個階段的概念,它基本上是您想要運行插件的掛鉤點。因此,例如,您可以創建一個腳本來運行兩個應用程序(具有配置的端口和所有內容),然后分階段運行腳本,然后在您必須在測試模塊中pre-integration-test
配置的幫助下將所有測試作為集成測試運行maven-failsafe-plugin
pom 然后在一個post-integration-test
階段運行另一個腳本來停止這兩個應用程序
添加回答
舉報