仅使用maven在CI服务器上运行集成测试

时间:2013-02-12 18:47:23

标签: java-ee maven continuous-integration

每次构建运行单元测试是否明智但完全跳过集成测试阶段 - 将其留给CI服务器?

目前我正在开发一个JavaEE项目,该项目几乎只受到一些集成测试的影响,这些测试编写得很糟糕并且需要花费很多时间。每次我进行任何更改时,我都需要等待几分钟才能进行构建(90%的时间就是那些集成测试)。

我的想法是配置一些CI服务器,例如Jenkins,以便它可以获取对存储库的任何提交(甚至在maven构建之后更好)并使用集成测试运行maven构建。但是有可能以一种方式配置maven,当我键入mvn install时,它将编译运行单元测试 - 构建项目,但完全省略整合阶段(以加快开发)。那么CI会再次启动并开始运行构建,但这次是否进行了集成测试?

这样,在更改某些代码和部署之间的时间会更短,更少令人沮丧,并且在CI服务器完成构建后的几分钟内,任何与集成相关的错误都会被缓存。

这是个好主意吗?任何人都可以建议如何配置maven以获得此类行为?

2 个答案:

答案 0 :(得分:4)

您应该可以使用个人资料执行此操作。虽然我可能需要有关集成测试配置的更多信息。我使用maven-failsafe-plugin和配置文件的组合已经使用了几年的项目。以下是来自pom的示例代码段:

<profiles>
    <profile>
        <id>integration-tests</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>integration-test</id>
                            <goals>
                                <goal>integration-test</goal>
                            </goals>
                            <configuration>
                                ...
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

在正常的本地开发期间,运行mvn install不应运行通过maven-failsafe-plugin运行的集成测试。然后,您可以将CI服务器配置为运行mvn clean install -Pintegration-tests

答案 1 :(得分:1)

首先,我认为这是一个好主意。它将使您的开发周期更快。

执行mvn install时,我不知道完全省略集成测试阶段的方法。你可以在开发过程中执行“mvn clean package”吗?如果这不是一个选项,你使用什么插件进行集成测试?大多数插件都有一个属性“skip”,您可以使用该属性跳过插件的执行。您可能希望使用配置文件为不同的方案打开和关闭“跳过”。

相关问题