Java Spring Boot中多战应用的集成测试
我有一个由多个maven war项目组成的应用程序 我有另一个maven项目,它使用org.springframework.web.client.RestTemplate调用对手动启动的tomcat部署的多战争应用程序运行JUnit集成测试 但是,我希望我的集成测试项目在运行我的测试之前,在spring boot中实际启动我的multi-war应用程序(在整个套件中只启动一次) 在我的集成测试项目中,我希望能够将所有war项目作为一个spring引导应用程序一起运行,每个项目都有自己的上下文路径(例如,项目“a”的localhost:8080/a,项目“b”的localhost:8080/b等等),并且不改变原始的war项目(还没有(尚未)spring引导感知)。如果我无法在spring boot中从集成测试项目运行这些项目而不更改它们,那么我至少希望尽可能减少打包war文件中spring boot依赖项和配置的使用 我能够让我的集成测试项目依赖于一个war项目,启动它并对其运行测试…但是我没有成功地让两个war项目在spring boot中在不同的ContextPath下一起运行 欢迎提出任何建议 以下是我一直在使用的一些资源:Java Spring Boot中多战应用的集成测试,java,spring,maven,junit,spring-boot,Java,Spring,Maven,Junit,Spring Boot,我有一个由多个maven war项目组成的应用程序 我有另一个maven项目,它使用org.springframework.web.client.RestTemplate调用对手动启动的tomcat部署的多战争应用程序运行JUnit集成测试 但是,我希望我的集成测试项目在运行我的测试之前,在spring boot中实际启动我的multi-war应用程序(在整个套件中只启动一次) 在我的集成测试项目中,我希望能够将所有war项目作为一个spring引导应用程序一起运行,每个项目都有自己的上下文路径
- (Spring引导文档)
- (关于启动spring应用程序一次的博客文章)
- (关于在集成测试项目pom中将war文件作为依赖项包括在内的建议)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.17</version>
<configuration>
<includes>
<include>**/*Test*</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<webapps>
<webapp>
<groupId>com.mycompany</groupId>
<artifactId>app1</artifactId>
<version>${project.version}</version>
<type>war</type>
<asWebapp>true</asWebapp>
</webapp>
<webapp>
<groupId>com.mycompany</groupId>
<artifactId>app2</artifactId>
<version>${project.version}</version>
<type>war</type>
<asWebapp>true</asWebapp>
</webapp>
</webapps>
</configuration>
<executions>
<execution>
<id>start-tomcat</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run-war</goal>
</goals>
<configuration>
<fork>true</fork>
</configuration>
</execution>
<execution>
<id>stop-tomcat</id>
<phase>post-integration-test</phase>
<goals>
<goal>shutdown</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
maven surefire插件
2.17
真的
maven故障保护插件
2.17
**/*试验*
集成测试
验证
org.apache.tomcat.maven
tomcat7 maven插件
2.2
/
com.mycompany
附件1
${project.version}
战争
真的
com.mycompany
附件2
${project.version}
战争
真的
启动雄猫
预集成测试
打仗
真的
阻止雄猫
整合后测试
关闭
我很困惑。听起来你试图运行的战争没有使用Spring Boot。假设这是正确的,为什么要尝试使用SpringBoot来运行它们?我很可能误解了。你能详细介绍一下你想要实现的目标吗?为什么你认为SpringBoot会帮助你实现它?好问题@AndyWilkinson。你说得对。战争没有使用spring boot,我也不打算这样做。它们将部署在WebLogic中进行生产。然而,我希望对完全部署的应用程序(本地和Jenkins CI构建中)运行集成测试,这样我就不必首先手动启动tomcat中的所有WAR…而是类似于“mvn测试”。我认为spring boot可能是一个很好的选择。这有帮助吗?我认为Spring Boot不是适合这项工作的工具。你不能使用Tomcat的maven插件并将其配置为部署多个web应用程序吗?类似这样的事情:如果我运行mvn clean install-DskipTests,有没有办法阻止maven或tomcat插件加载webapps?