跨多个Spring Boot应用程序的端到端测试

Han*_*tsy 5 end-to-end spring-test spring-integration spring-boot

目前在我们的项目中,我们使用Spring Integration来集成许多服务和一些与协议相关的端点.

该项目是一个多Spring Boot应用程序,将在生产中部署多个可执行jar.

问题是:

  1. 如何运行需要跨这些应用程序运行的端到端测试,我必须手动逐个运行?在非-Spring-Boot应用程序之前,我可以使用Maven tomcat7插件来完成这项工作(将战争部署到嵌入式tomcat并在预集成测试阶段运行),现在如何在运行之前启动所有相关应用程序我的考试.假设我现在不使用Docker/Vagrant.

    在stackoverflow上发现了类似的问题,Maven下的多个Spring启动应用程序的端到端集成测试

    如何自动运行end2end测试?

  2. 在Spring Integration测试中,有时我必须模拟一个http端点,所以我写了一个简单Controller的测试包来存档这个目的,但我想在不同的端口运行它,这使它更像一个外部资源.@SpringBootApplicaiton为此目的,如何在测试中同时在不同的端口运行不同的类?

我使用的是最新的Maven,Java 8,Spring Boot 1.3.1.RELEASE.

Art*_*lan 0

实际上,Spring Boot 附带了embeddedServlet 容器支持。Tomcat就是其中之一。默认为打开org.springframework.boot:spring-boot-starter-web

有了org.springframework.boot:spring-boot-starter-test和its @SpringApplicationConfiguration@WebIntegrationTest你就可以达到你的要求,即使是随机的port

请参阅 Spring Boot参考手册以获取更多信息:

要更改端口,您可以将环境属性作为冒号或等号分隔的名称/值对添加到@WebIntegrationTest,例如@WebIntegrationTest("server.port:9000")。此外,您可以将 server.port 和 management.port 属性设置为 0,以便使用随机端口运行集成测试。

这样,您@SpringBootApplicaiton将被部署到嵌入式 Tomcat,并且您的测试可以访问运行的服务/控制器。

注意:您的 Spring Boot 应用程序是否具有 Spring Integration 功能并不重要。行为是相同的:嵌入式 Servlet 容器和针对@Value("${local.server.port}").

  • 我非常了解 Spring Boot 应用程序中的“@IntegrationTest”和“@WebIntegrationTest”。也许我的表达让你感到困惑,我不是英国人。我需要的是在启动几个 Spring Boot 应用程序之前运行独立的 end2end 测试(我的问题中的情况 1)。 (2认同)