Wie erkenne ich langsame Unit-Tests, wenn ich das Maven-Surefire-Plugin im Parallelmodus verwende?

Im Hinblick auf die Verwaltung / Verkürzung unserer Erstellungszeiten möchte ich herausfinden, welche Komponententests die meiste Zeit in Anspruch nehmen - in einer parallelen Testumgebung mit demmaven-surefire-plugin.

Wir benutzenJUnit (4.10) für Komponententests. Wir gebrauchenmaven (2.2.1 - einige Plugins, die wir verwenden, unterstützen noch nicht Maven 3) als unser primäres Build-Tool, und dasmaven-surefire-plugin (2.19), um Komponententests durchzuführen.

Wir benutzen dasmaven-surefire-plugin imparallel mode, bei dem sowohl die einzelnen Methoden als auch die Komponententestklassen parallel ausgeführt werden - dies ist sehr wichtig, da hierdurch die Testzeit für Buildeinheiten erheblich verkürzt wird. Dasmaven-surefire-plugin ist im @ konfigurie.pom wie folgt

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

Dies hat jedoch zur Folge, dass in der Konsolenausgabe die für jede JUnit-Testklasse verstrichene Zeit die Gesamtzeit für alle Methoden in der Klasse ist.

Wenn eine Testklasse beispielsweise 10 Unit-Testmethoden hätte, deren Ausführung jeweils 1 Sekunde dauerte, würde die Ausführung der Testklasse etwa 1 Sekunde dauern (wobei jede Methode parallel ausgeführt wird), aber die Ausgabe würde in etwa so aussehen :

Running com.package.QuickParallelTest Testlauf: 10, Fehler: 0, Fehler: 0, Übersprungen: 0, Verstrichene Zeit: 10,0 Sek. - in com.package.QuickParallelTest

Dies macht es schwierig, in der Konsolenausgabe von einer anderen Testklasse mit 10 Unit-Testmethoden zu unterscheiden, von denen 9 fast sofort ausgeführt werden und 1 fast 10 Sekunden dauert. In diesem Fall würde die Ausführung der Testklasse etwa 10 Sekunden dauern (aufgrund der langsamen Testmethode), aber dasmaven-surefire-pluginie Ausgabe von @ console wäre praktisch dieselbe:

Running com.package.SlowParallelTest Testlauf: 10, Fehler: 0, Fehler: 0, Übersprungen: 0, Verstrichene Zeit: 10,0 Sek. - in com.package.SlowParallelTest

Idealerweise möchte ich, dass die verstrichene Zeit angibt, wie lange die Ausführung der Testklasse (parallel) gedauert hat, und nicht die Gesamtzeit, die für die separate Ausführung der Methoden benötigt wurde (als ob ein Thread ausgeführt würde).

Also, meine Frage (n) ist / sind:

Gibt es eine fehlende Maven-Surefire-Plugin-Einstellung, sodass die Druckzusammenfassung die pro Klasse benötigte Zeit anzeigt, anstatt die Methoden zu aggregieren?Ist dies ein bekannter "Bug" (oder "Feature") in dermaven-surefire-plugin? (Ich habe das @ überprüSureFire JIRA, konnte aber so etwas nicht finden.)Ist es eine alternative Möglichkeit für mich, festzustellen, welche Tests lange dauern und daher für die Optimierung am besten geeignet sind?

BEARBEITEN

Ich habe versucht, mit einigen zusätzlichen Konfigurationseinstellungen zu spielen. Seltsamerweise fügt man der Konfiguration im @ Folgendes hin.pom scheint die in der Konsolenausgabe verstrichene Zeit in die Zeit zu ändern, die für die Ausführung der Testklasse benötigt wird. Dies ist jedoch (meiner Meinung nach) nicht intuitiv, da diese Einstellungen das @ sinStandardeinstellunge:

    <configuration>
      ...
      <forkCount>1</forkCount>
      <reuseForks>true</reuseForks>
    </configuration>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage