有没有办法将长时间运行(例如压力测试)分开,以便它们在Maven 2中默认不运行?
-
05-07-2019 - |
题
我们在这里一直需要我无法弄清楚如何使用maven 2库存工具和文档来解决这个问题。
我们的一些开发人员有一些非常长时间运行的JUnit测试(通常是压力测试),在任何情况下都不应该作为构建过程/每晚构建的常规部分运行。
当然,我们可以使用surefire插件的排除机制,只是从构建中删除它们,但理想情况下我们会喜欢允许开发人员通过Maven 2随意运行它们的东西。
解决方案
通常,您会在maven配置中添加一个配置文件,该配置文件运行不同的测试集:
使用mvn -Pintegrationtest install
运行此命令 <profile>
<id>integrationtest</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-client -Xmx896m -XX:MaxPermSize=192m</argLine>
<forkMode>once</forkMode>
<includes>
<include>**/**/*Test.java</include>
<include>**/**/*IntTest.java</include>
</includes>
<excludes>
<exclude>**/**/*SeleniumTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<activation>
<property>
<name>integrationtest</name>
</property>
</activation>
</profile>
其他提示
添加 krosenvold 的答案,以确保没有意外行为,请确保您还有默认配置文件,默认情况下排除集成或压力测试你想要在你的特殊档案中运行。
<profile>
<id>normal</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/**/*IntTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
您需要创建一个这样的配置文件,只需在配置文件之外列出surefire-plugin将覆盖该配置文件,如果选择它:
mvn -P integrationtest clean install
使用集成测试插件,例如超级有用的集成测试Thingy 来自单元测试的单独集成测试(长时间运行,系统测试)(纯粹主义者说所有真正的单元测试运行最多30秒)。为单元测试和集成测试制作两个Java包。
然后不要将此插件绑定到某个阶段(正常的maven生命周期),并且仅在显式调用它作为目标时运行它,如下所示:
mvn shitty:clean shitty:install shitty:test
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>shitty-maven-plugin</artifactId>
</plugin>
</plugins>
这样,您的普通开发人员不会受到影响,并且您将能够按需运行集成测试。
另一个选择是让压力测试检测到它在maven中运行并且只运行一次或两次。即变成常规功能测试。这样你就可以检查代码是否仍然良好,但是长时间不运行。
不隶属于 StackOverflow