有没有办法将长时间运行(例如压力测试)分开,以便它们在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测试。 这样你可以检查代码是否仍然良好,但不能长时间运行。