为了管理/减少构建时间,我想使用来确定在并行测试环境中哪些单元测试花费的时间最多maven-surefire-plugin
。
我们正在使用JUnit
(4.10)进行单元测试。我们使用maven
(2.2.1- 我们使用的某些插件尚不支持maven
3)作为我们的主要构建工具,并使用maven-surefire-plugin
(2.19)运行单元测试。
我们使用的是maven-surefire-plugin
在并行模式,其中两个单独的方法在平行和单元测试类运行并行运行-这是非常重要的,因为它显著减少了构建单元测试时间。的maven- surefire-plugin
配置.pom
如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<argLine>-Xmx2G -XX:MaxPermSize=1G -XX:-UseSplitVerifier</argLine>
<failIfNoTests>false</failIfNoTests>
<parallel>classesAndMethods</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
</configuration>
</plugin>
但是,其含义之一是,在控制台输出中,每个JUnit测试类所花费的时间就是该类中所有方法的合计时间。
例如,如果一个测试类有10个单元测试方法,每个方法要花1秒才能运行,那么该测试类要花大约1秒的时间运行(每个方法并行运行),但是输出将类似于:
运行com.package.QuickParallelTest测试运行:10,失败:0,错误:0,跳过:0,经过时间:10.0秒-在com.package.QuickParallelTest中
这使得很难在控制台输出中将其与具有10种单元测试方法的另一种测试类区分开,其中9种几乎立即运行,而1种几乎需要10秒才能运行。在这种情况下,测试类将花费大约10秒钟来运行(由于一种缓慢的测试方法),但maven- surefire-plugin
控制台输出实际上是相同的:
运行com.package.SlowParallelTest测试运行:10,失败:0,错误:0,跳过:0,经过的时间:10.0秒-在com.package.SlowParallelTest中
理想情况下,我希望经过的时间表示测试类(并行运行)花费了多长时间,而不是指示分别运行方法所花费的总时间(就像单线程一样)。
因此,我的问题是:
maven-surefire-plugin
吗?(我检查了SureFire JIRA,但找不到类似的东西。)编辑:
我尝试使用一些其他配置设置。奇怪的是,在配置中添加以下内容.pom
似乎会将控制台输出中经过的时间更改为运行测试类所花费的时间-
但是,(在我看来)这是违反直觉的,因为这些设置是默认设置:
<configuration>
...
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
</configuration>
将reportFormat条目添加到Maven
Surefire插件配置中并将其值设置为plain
(而不是默认值brief
)将为您提供每种方法所用的时间。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<argLine>-Xmx2G -XX:MaxPermSize=1G -XX:-UseSplitVerifier</argLine>
<failIfNoTests>false</failIfNoTests>
<parallel>classesAndMethods</parallel>
<useUnlimitedThreads>true</useUnlimitedThreads>
<reportFormat>plain</reportFormat>
</configuration>
</plugin>
</plugins>
</build>
使用默认的reportFormat(brief
)输出:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.sample.mocking.InternalServiceTestCase
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.241 sec - in com.sample.mocking.InternalServiceTestCase
输出plain
值:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.sample.mocking.InternalServiceTestCase
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.187 sec - in com.sample.mocking.InternalServiceTestCase
test(com.sample.mocking.InternalServiceTestCase) Time elapsed: 0.005 sec
mockTest(com.sample.mocking.InternalServiceTestCase) Time elapsed: 0.17 sec
mockTestFailureTollerance(com.sample.mocking.InternalServiceTestCase) Time elapsed: 0.007 sec
mockProcessfile(com.sample.mocking.InternalServiceTestCase) Time elapsed: 0.003 sec
此选项可以为您提供有关测试和执行时间的更多详细信息。
我试过下面的东西,但不起作用。 我可以使用gradle maxParallelForks属性在类(spec)级别执行测试,但我希望在测试级别并行运行。
问题内容: 我尝试使用Maven创建一个测试项目,并且单元测试工作正常。但是,当尝试对j2ee项目执行相同操作时,surefire无法找到单元测试。测试位于正确的目录(src / test / java)中,并且正在对其进行编译。 junit测试位于src / test / java / unit / TestAddition.java pom.xml中的surefire插件配置不包含/排除任何文
null 默认情况下,IntelliJ提供Ofc Maven。我已经尝试了mvnDebug tomcat7:run命令,但是intelliJ不能解析Maven内置命令行中的mvnDebug短语。也不能使用cmd命令行,因为我找不到“home”路径,因为maven是内置的IntelliJ。也尝试使用intelli,配置远程调试,但感到困惑。在“Maven Projects”窗口中也找不到tomcat
当我使用maven运行我的testng套件xml时,在suite标记中没有parallel=“tests”时,我会出现异常。 当我用parallel=“tests”运行它时,它工作得很好。此外,如果我在没有parallel=“tests”的情况下从eclipse“Run as testng Test”运行我的testng套件xml,它工作得很好。请帮忙。
有什么办法可以做到吗?如果我们不能用maven surefire插件来做,是否可以在测试中配置它?
我一直在周而复始地试图弄明白这一点,在Selenium网格集群上使用cucumber和maven并行选项几乎是不可能的。 我的跑步者根据标签跑步,应该会选择5到6个特征文件。 我使用Cucumber for Java、Maven surefire 2.19和Junit。 到目前为止,pom的surefire配置如下所示:- 我的跑步者看起来像这样:- 我和马文一起跑步:- 清洁测试-P RunFe