每次构建运行单元测试是否明智但完全跳过集成测试阶段 - 将其留给CI服务器?
目前我正在开发一个JavaEE项目,该项目几乎只受到一些集成测试的影响,这些测试编写得很糟糕并且需要花费很多时间。每次我进行任何更改时,我都需要等待几分钟才能进行构建(90%的时间就是那些集成测试)。
我的想法是配置一些CI服务器,例如Jenkins,以便它可以获取对存储库的任何提交(甚至在maven构建之后更好)并使用集成测试运行maven构建。但是有可能以一种方式配置maven,当我键入mvn install
时,它将编译运行单元测试 - 构建项目,但完全省略整合阶段(以加快开发)。那么CI会再次启动并开始运行构建,但这次是否进行了集成测试?
这样,在更改某些代码和部署之间的时间会更短,更少令人沮丧,并且在CI服务器完成构建后的几分钟内,任何与集成相关的错误都会被缓存。
这是个好主意吗?任何人都可以建议如何配置maven以获得此类行为?
答案 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”,您可以使用该属性跳过插件的执行。您可能希望使用配置文件为不同的方案打开和关闭“跳过”。