目前在我们的项目中,我们使用Spring Integration来集成许多服务和一些与协议相关的端点。
该项目是一个多Spring Boot应用程序,将在生产中部署多个可执行jar。
问题是:
如何运行需要跨这些应用程序运行的端到端测试,我必须手动逐个运行?在非-Spring-Boot应用程序之前,我可以使用Maven tomcat7插件来完成这项工作(将战争部署到嵌入式tomcat并在预集成测试阶段运行),现在如何启动在我运行测试之前,所有相关的应用程序。假设我现在不使用Docker / Vagrant。
在stackoverflow End to end integration test for multiple spring boot applications under Maven
上找到了类似的问题如何自动运行end2end测试?
在Spring Integration测试中,有时我必须模拟一个http端点,所以我在测试包中写了一个简单的Controller
来存档这个目的,但我想在不同的端口运行它,这使它更像一个外部资源。为此目的,如何在测试中同时在不同的端口运行不同的@SpringBootApplicaiton
类?
我正在使用最新的Maven,Java 8,Spring Boot 1.3.1.RELEASE。
答案 0 :(得分:0)
实际上,Spring Boot附带了embedded
Servlet容器支持。其中一个就是Tomcat。 org.springframework.boot:spring-boot-starter-web
的默认设置为开启。
使用org.springframework.boot:spring-boot-starter-test
及其@SpringApplicationConfiguration
和@WebIntegrationTest
即使使用随机port
,您也可以达到您的要求。
请参阅Spring Boot Reference Manual以获取更多信息:
要更改端口,您可以将环境属性添加到@WebIntegrationTest,作为冒号或等号分隔的名称 - 值对,例如@WebIntegrationTest(" server.port:9000&#34)。此外,您可以将server.port和management.port属性设置为0,以便使用随机端口运行集成测试。
通过这种方式,您的@SpringBootApplicaiton
将部署到该嵌入式Tomcat,您的测试可以访问已运行的服务/控制器。
注意:如果Spring Boot应用程序具有Spring Integration功能,则无关紧要。行为是相同的:嵌入式Servlet容器和针对@Value("${local.server.port}")
的集成测试。