2008-11-10 19 views
8

Wie können wir die Junit-Tests in unserer Suite finden, die am längsten dauern? Die Standardausgabe der junitreport ant-Aufgabe ist hilfreich, aber unsere Suite hat Tausende von Tests, die in vielen kleineren Suites organisiert sind, so dass es mühsam wird und die schlimmsten Übeltäter sich ständig ändern.Längste Laufeinheitstests?

Wir verwenden luntbuild, aber im Idealfall wäre es etwas, was wir einfach von ant laufen könnten.

+0

Nur aus Interesse, warum willst du es wissen? Einer meiner nützlichsten jUnit-Tests braucht eine lange Zeit - nicht weil der Code ineffizient ist, sondern weil er mit sehr erschöpfenden Bedingungen testet (drei für() Schleifen) – slim

+0

Wir haben viele schlecht geschriebene Tests. Manche machen viel unnötiges Setup. Einige Tests verwenden Thread.sleep(). Ein paar brauchen wirklich eine lange Zeit zu laufen. Unsere Suite dauert eine halbe Stunde und ich suche nach den einfachen Zielen, um sie zu beschleunigen. –

Antwort

11

JUnitReport arbeitet mit den von der JUnit-Task erzeugten XML-Dateien. Sie könnten eine Aufgabe schreiben, die die Testdauer aus denselben XML-Dateien (TEST - *. Xml) liest. Sie können aber auch eine Verknüpfung verwenden und nur die von JUnitReport (TESTS-TestSuites.xml) erstellte Übersichtsdatei lesen, die alle Informationen in der einzelnen Datei enthält.

Eine schnelle Möglichkeit, dies zu tun, ist ein bisschen xsl verwenden nur die langsamsten Tests zeigen:

<?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> 

von Ant So führen Sie dies tun:

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

Dann können Sie einfach Blick auf den ersten X-Linien, die die X langsamste Tests zu finden:

jfredrick $ head Ziel/slow.txt

    ForcingBuildShouldNotLockProjectInQueuedStateTest: 11.581
    CruiseControlControllerTest: 7,335
    AntBuilderTest: 6.512
    Maven2BuilderTest: 4.412
    CompositeBuilderTest: 2,222
    ModificationSetTest: 2.05
    NantBuilderTest: 2,04
    CruiseControlConfigTest: 1.747
    Project: 1,743
    BuildLoopMonitorTest: 0,913
2

Verwenden Sie TeamCity. Sie haben großartige Berichte und Version 4.0 ordert sogar Ihre Tests so, dass die flockigsten Tests zuerst ausgeführt werden.

1

Wenn Sie Ihre Tests mit dem Tempomat auf Ihrem Build-Server starten, ist dies eine der Optionen auf oberster Ebene, die nach Laufzeit sortiert werden kann.

Verwandte Themen