有没有办法将长时间运行(例如压力测试)分开,以便它们在Maven 2中默认不运行?

我们一直有这样的需求,我无法弄清楚如何使用库存Maven 2工具和文档解决。

我们的一些开发人员有一些非常长时间运行的JUnit测试(通常是压力测试),在任何情况下都不应该作为构建过程/每晚构建的常规部分运行。

当然,我们可以使用surefire插件的排除机制,只是从构建中删除它们,但理想情况下我们喜欢允许开发人员通过Maven 2随意运行它们的东西。

通常,您需要为运行不同测试集的maven配置添加配置文件:

用mvn -Pintegrationtest install运行它

 integrationtest    org.apache.maven.plugins maven-surefire-plugin  -client -Xmx896m -XX:MaxPermSize=192m once  **/**/*Test.java **/**/*IntTest.java   **/**/*SeleniumTest.java        integrationtest    

添加到krosenvold的答案,以确保没有意外行为,请确保您还拥有默认情况下处于活动状态的默认配置文件,该配置文件排除了您要在特殊配置文件中运行的集成或压力测试。

  normal    org.apache.maven.plugins maven-surefire-plugin   **/**/*IntTest.java       true   

您需要创建一个这样的配置文件,只需在配置文件之外列出surefire-plugin将覆盖配置文件,如果选择它:

 mvn -P integrationtest clean install 

使用集成测试插件(例如超级有用的集成测试Thingy)将集成测试(长时间运行,系统性)与unit testing分开(纯粹主义者说所有真正的unit testing运行最多30秒)。 为您的unit testing和集成测试制作两个Java包。

然后不要将这个插件绑定到一个阶段(正常的maven生命周期),只有在显式调用它作为目标时才运行它,如下所示: mvn shitty:clean shitty:install shitty:test

   org.codehaus.mojo shitty-maven-plugin   

这样,您的普通开发人员不会受到影响,并且您将能够按需运行集成测试。

另一个选择是让压力测试检测到它在maven中运行并且只运行一次或两次。 即变成常规function测试。 这样你可以检查代码是否仍然良好,但不能长时间运行。