使用 maven-failsafe 和 fabric8-maven 进行 运行 命中容器化数据库的集成测试
Using maven-failsafe with fabric8-maven to run integration tests that hit a containerised DB
我正在努力综合如何正确地一起使用 maven-failsafe 和 fabric8-maven 插件。
我想要 运行 集成测试,但是在预集成测试阶段,启动一个 docker 容器 运行ning 一个数据库,并在 post-集成阶段停止容器。
查看 fabric8 docker-maven-plugin documentation,它指出这是可能的,但 none 的示例似乎说明了这一点。
更新#1:
这是对我成功的配置:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.15.9</version>
<executions>
<execution>
<id>start-neo4j</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-neo4j</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<images>
<image>
<alias>neo4j</alias>
<name>neo4j:2.3.2-enterprise</name>
<run>
<ports>
<port>7474</port>
</ports>
<wait>
<log>Starting...</log>
<time>20000</time>
</wait>
</run>
</image>
</images>
</configuration>
</plugin>
我们推荐使用 docker 在 Maven 中进行集成和系统测试的方法是通过 fabric8 arquillian plugin。这负责为测试创建一个新的命名空间并配置所有 kubernetes 资源,然后 运行 将你的 JUnit 测试用例 运行 断言等
您需要一个 docker 数据库映像并将其包装在 kubernetes yaml/json 文件中,以便它可以 运行 在部署您的应用程序之前通过 fabric8-arquillian
docker-maven-plugin 有多个示例显示绑定的工作原理:
https://github.com/fabric8io/docker-maven-plugin/blob/master/samples/data-jolokia-demo/ 包含用于 运行ning 集成测试的各种配置变体,其中在预测试阶段启动 tomcat,部署应用程序,测试 运行,然后 tomcat 拆除。
https://github.com/rhuss/docker-maven-sample is probably more interesting for you as it covers your use case with starting a Postgres db before the integration test (inclusive waiting until the DB is completely started). The binding is shown here :
<executions>
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>build</goal>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
但我建议更详细地检查 pom.xml,因为它包含更多信息,例如了解如何设置等待部分。如果仍有不清楚的地方,请随时在此项目中提出问题。
我正在努力综合如何正确地一起使用 maven-failsafe 和 fabric8-maven 插件。
我想要 运行 集成测试,但是在预集成测试阶段,启动一个 docker 容器 运行ning 一个数据库,并在 post-集成阶段停止容器。
查看 fabric8 docker-maven-plugin documentation,它指出这是可能的,但 none 的示例似乎说明了这一点。
更新#1:
这是对我成功的配置:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.15.9</version>
<executions>
<execution>
<id>start-neo4j</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-neo4j</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<images>
<image>
<alias>neo4j</alias>
<name>neo4j:2.3.2-enterprise</name>
<run>
<ports>
<port>7474</port>
</ports>
<wait>
<log>Starting...</log>
<time>20000</time>
</wait>
</run>
</image>
</images>
</configuration>
</plugin>
我们推荐使用 docker 在 Maven 中进行集成和系统测试的方法是通过 fabric8 arquillian plugin。这负责为测试创建一个新的命名空间并配置所有 kubernetes 资源,然后 运行 将你的 JUnit 测试用例 运行 断言等
您需要一个 docker 数据库映像并将其包装在 kubernetes yaml/json 文件中,以便它可以 运行 在部署您的应用程序之前通过 fabric8-arquillian
docker-maven-plugin 有多个示例显示绑定的工作原理:
https://github.com/fabric8io/docker-maven-plugin/blob/master/samples/data-jolokia-demo/ 包含用于 运行ning 集成测试的各种配置变体,其中在预测试阶段启动 tomcat,部署应用程序,测试 运行,然后 tomcat 拆除。
https://github.com/rhuss/docker-maven-sample is probably more interesting for you as it covers your use case with starting a Postgres db before the integration test (inclusive waiting until the DB is completely started). The binding is shown here :
<executions> <execution> <id>start</id> <phase>pre-integration-test</phase> <goals> <goal>build</goal> <goal>start</goal> </goals> </execution> <execution> <id>stop</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions>
但我建议更详细地检查 pom.xml,因为它包含更多信息,例如了解如何设置等待部分。如果仍有不清楚的地方,请随时在此项目中提出问题。