Unit testing 运行时间最长的单元测试?

Unit testing 运行时间最长的单元测试?,unit-testing,junit,Unit Testing,Junit,我们如何在套件中找到运行时间最长的junit测试?junitreport ant任务的默认输出是有帮助的,但是我们的套件中有数千个测试被组织成许多较小的套件,因此它变得单调乏味,最糟糕的违规者总是在变化 我们使用luntbuild,但理想情况下,它可以从ant运行。使用。他们有很好的报告,版本4.0甚至命令您的测试,以便最不稳定的测试首先运行。如果您使用巡航控制在构建服务器上启动测试,它是按运行时间排序的顶级选项之一。JUnitReport可以处理JUnit任务生成的xml文件。您可以编写一个任

我们如何在套件中找到运行时间最长的junit测试?junitreport ant任务的默认输出是有帮助的,但是我们的套件中有数千个测试被组织成许多较小的套件,因此它变得单调乏味,最糟糕的违规者总是在变化


我们使用luntbuild,但理想情况下,它可以从ant运行。

使用。他们有很好的报告,版本4.0甚至命令您的测试,以便最不稳定的测试首先运行。

如果您使用巡航控制在构建服务器上启动测试,它是按运行时间排序的顶级选项之一。

JUnitReport可以处理JUnit任务生成的xml文件。您可以编写一个任务,从相同的xml文件(test-*.xml)中读取测试持续时间。但是,您也可以使用快捷方式,只需读取由JUnitReport(TESTS TestSuites.xml)创建的摘要文件,该文件包含单个文件中的所有信息

一种快速的方法是使用一点xsl来显示最慢的测试:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:text>    </xsl:text>
    <xsl:for-each select="testsuites/testsuite">
    <xsl:sort select="@time" data-type="number" order="descending" />
      <xsl:value-of select="@name"/> : <xsl:value-of select="@time"/>
      <xsl:text>
  </xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

: 
要从Ant运行,请执行以下操作:

<target name="show.slow.tests">
    <xslt in="target/tests-results/TESTS-TestSuites.xml" out="target/slow.txt" style="slow.xsl"/>
</target>

然后,您只需查看前X行即可找到X个最慢的测试:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:text>    </xsl:text>
    <xsl:for-each select="testsuites/testsuite">
    <xsl:sort select="@time" data-type="number" order="descending" />
      <xsl:value-of select="@name"/> : <xsl:value-of select="@time"/>
      <xsl:text>
  </xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
jfredrick$head目标/slow.txt

    ForcingBuild不应锁定项目查询状态测试:11.581
    巡航控制测试:7.335
    AntBuilderTest:6.512
    Maven2BuilderTest:4.412
    CompositeBuilderTest:2.222
    修改测试:2.05
    NantBuilderTest:2.04
    CruiseControl配置测试:1.747
    项目测试:1.743
    BuildLoopMonitorTest:0.913

只是出于兴趣,你为什么想知道?我最有用的jUnit测试之一需要很长时间——不是因为代码效率低下,而是因为它使用一组非常详尽的条件(三个for()循环深)进行测试——我们有很多写得很差的测试。有些人做了很多不必要的设置。有些测试使用Thread.sleep()。有些确实需要很长时间才能运行。我们的套件需要半小时运行,我正在寻找容易的目标来加速它。