我正在使用故障保护插件编写一些集成测试。
我要执行以下操作:
1)启动Docker(目标是在集成测试前阶段启动)
2)启动Spring(阶段预集成测试中的目标启动)
3)测试(相位集成测试)
4)Stop Spring(集成测试后的目标停止)
5)停止Docker(集成测试后停止运行)
为什么?我想在Spring之前启动Docker,以便在Spring引导时所有数据库都准备就绪,我也想在Spring之后停止Docker,以避免由于数据库连接丢失而在Spring中产生很多错误。
我有以下pom.xml:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.20.1</version>
<executions>
<execution>
<id>run-docker-containers</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
...
</configuration>
</execution>
<execution>
<id>stop-docker-containers</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
...
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
但是有了这个pom.xml,我得到了以下命令:
1)启动Docker
2)启动Spring
3)测试
4)停止Docker
5)停止弹簧
这是,Docker在Spring之前已停止,我不希望这样做。
我知道Maven中的执行顺序由pom.xml中的顺序给出,但是在这种情况下,我需要越过目标。
有什么建议吗?
谢谢。
答案 0 :(得分:1)
Maven中的执行顺序基于两个组成部分:
Maven不允许对同一插件进行两次配置,因此无法将Docker Stop执行移至Spring以下。我知道解决此类问题的唯一方法是将第三阶段引入混合。将“停止”目标绑定到verify
阶段看起来有点怪异,我肯定会添加注释来解释为什么这样做是为了后代-但这确实可行。
此插件配置执行以下操作(假设您使用maven-failsafe-plugin
进行集成测试;如果您使用其他插件,请遵循与该插件相同的原则)。括号内的Maven生命周期阶段:
1)Docker Start(集成前测试)
2)Spring Start(预集成测试;在Docker之后配置Spring插件)
3)执行测试(集成测试)
4)Spring Stop(集成测试后)
5)Docker停止(验证)
6)验证测试结果(验证;在Docker之后配置故障安全插件)
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.20.1</version>
<executions>
<execution>
<id>run-docker-containers</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-docker-containers</id>
<phase>verify</phase> <!-- important: note phase -->
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${version.maven.failsafe.plugin}</version>
<executions>
<execution>
<id>failsafe-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>failsafe-verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>