Java Spring Boot中多战应用的集成测试

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引导应用程序一起运行,每个项目都有自己的上下文路径

我有一个由多个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下一起运行

欢迎提出任何建议

以下是我一直在使用的一些资源:

  • (Spring引导文档)

  • (关于启动spring应用程序一次的博客文章)

  • (关于在集成测试项目pom中将war文件作为依赖项包括在内的建议)


根据安迪的建议,我使用了Tomcat7 Maven插件,它运行得很好。Jetty Maven插件是另一种选择(在IMO中有更好的文档记录),尽管我无法找到避免提供WAR文件“路径”的方法。Tomcat7 Maven插件,让我从本地的.m2存储库加载我的WAR。我还应该说,以下链接也很有帮助

这是我的集成测试项目pom的一部分

<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?