java – 如何在并行模式下使用maven-surefire-plugin时识别慢速单元测试?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何在并行模式下使用maven-surefire-plugin时识别慢速单元测试?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3711字,纯文字阅读大概需要6分钟。
内容图文
为了管理/缩短构建时间,我想确定哪些单元测试花费的时间最多 – 在使用maven-surefire-plugin的并行测试环境中.
我们使用JUnit(4.10)进行单元测试.我们使用maven(2.2.1 – 我们使用的一些插件还不支持maven 3)作为我们的主要构建工具,使用maven-surefire-plugin(2.19)来运行单元测试.
我们在parallel mode中使用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秒才能运行(每个方法并行运行),但输出结果如下:
Running com.package.QuickParallelTest Tests run: 10, Failures: 0, Errors:
0, Skipped: 0, Time elapsed: 10.0 sec – in com.package.QuickParallelTest
这使得很难在控制台输出与另一个测试类中区分10个单元测试方法,其中9个几乎立即运行,1个运行几乎需要10秒.在这种情况下,测试类需要大约10秒才能运行(因为一个慢速测试方法),但是maven-surefire-plugin控制台输出实际上是相同的:
Running com.package.SlowParallelTest Tests run: 10, Failures: 0, Errors:
0, Skipped: 0, Time elapsed: 10.0 sec – in com.package.SlowParallelTest
理想情况下,我希望花时间来指示测试类运行多长时间(并行),而不是单独运行方法所花费的总时间(就像单线程一样).
所以,我的问题是:
>我是否缺少maven-surefire-plugin设置,因此打印摘要会显示每个类所花费的时间而不是聚合方法?
>这是maven-surefire-plugin中已知的“错误”(或“功能”)? (我查了SureFire JIRA,但找不到这样的东西.)
>我是否有另一种方法可以确定哪些测试需要很长时间,因此是优化的首选.
编辑:
我试过玩一些额外的配置设置.奇怪的是,将以下内容添加到.pom中的配置似乎将控制台输出中经过的时间更改为运行测试类所花费的时间 – 但是,这(在我看来)这是违反直觉的,因为这些设置是default settings:
<configuration>
...
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
</configuration>
解决方法:
添加到Maven Surefire插件配置reportFormat条目并将其值设置为plain(而不是默认简介)将为每个方法提供经过的时间.
<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输出(简要):
-------------------------------------------------------
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
具有普通价值的输出:
-------------------------------------------------------
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
此选项可为您提供有关测试和执行时间的更多详细信息.
内容总结
以上是互联网集市为您收集整理的java – 如何在并行模式下使用maven-surefire-plugin时识别慢速单元测试?全部内容,希望文章能够帮你解决java – 如何在并行模式下使用maven-surefire-plugin时识别慢速单元测试?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。