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

时间:2016-01-18 15:50:50

标签: spring-boot spring-integration spring-test end-to-end

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

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

问题是:

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

    在stackoverflow End to end integration test for multiple spring boot applications under Maven

    上找到了类似的问题

    如何自动运行end2end测试?

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

  3. 我正在使用最新的Maven,Java 8,Spring Boot 1.3.1.RELEASE。

1 个答案:

答案 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}")的集成测试。