使用 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,因为它包含更多信息,例如了解如何设置等待部分。如果仍有不清楚的地方,请随时在此项目中提出问题。