2010-08-30 7 views
8

mit Maven todsichere, ich bin nicht in der Lage, parallele Testausführung Gabel. Das heißt, jeder meiner Testfälle muss in einer sera- paten JVM laufen, daher die Gabelung. Außerdem möchte ich, dass meine Testfälle parallel laufen. Der erste Teil funktioniert ohne Probleme: Ich kann jeden Testfall in einer eigenen JVM ausführen. Der zweite Teil ist jedoch immer noch eine Herausforderung für mich. Es ist mir nicht gelungen, die parallele Ausführung von Testfällen zu erreichen. Hier ist, wie mein Plugin Erklärung wie folgt aussehen:Maven Surefire: Kann parallele Testausführung nicht verzweigen

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <parallel>methods</parallel> 
      <forkMode>always</forkMode> 
       <argLine>-Xms512m -Xmx512m</argLine> 
     </configuration> 
</plugin> 

ich beide Methoden und Klassen versucht haben, aber haben keine Parallelisierung sehen. Meine JUnit-Version ist 4.7, wie durch die depency Erklärung gezeigt:

<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>compile</scope> 
    </dependency>    

Jede Hilfe viel appricated würde.

Gregoire.

Antwort

7

Ich denke, dass Sie die threadCount Parameter bei Verwendung des parallel Modus verwenden sollen:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <forkMode>always</forkMode> 
     <argLine>-Xms512m -Xmx512m</argLine> 
     <parallel>methods</parallel> 
     <threadCount>4</threadCount> 
    </configuration> 
    </plugin> 
2

Sichern Sie sich ein Log-Nachricht so etwas wie diese

[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true} 

Kurz vor dieser Position:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 

Diese Nachricht zeigt das an Der Parallelsicherheits-Junit-Provider ist aktiv.

Wenn dies nicht der Fall ist, kann todsichere Version eine andere Version von junit sein, als Sie denken. Alles unter 4.7 wird nicht funktionieren. Run mvn dependency: tree um zu überprüfen, welche Version (en) vorhanden sind.

Sie sollten auch auf todayfire 2.6 upgraden, da einige kleinere Fehler im Zusammenhang mit der parallelen Ausführung behoben wurden. Aus dem gleichen Grund sollten Sie das neueste Junit verwenden.

+0

Wollen Sie nicht, dass perCoreThreadCount wahr ist? Sonst bedeutet threadCount 1, dass Sie parallel mit nur einem Thread, d. – Nicolai

+0

Nein, Sie möchten, dass die Threads auf jedem verfügbaren Kern verteilt sind, nicht alle Threads auf einem Kern. Leider setzen sie den Standardwert auf perCoreThreadCount = true und führen alle Threads in einem Core aus. – rwst

0

Sind Sie sicher, dass es nicht funktioniert? Sie können nicht viel beschleunigen, wenn Ihre Tests nicht viele Testmethoden enthalten. Mit forkMode = immer das Beste, was Sie tun können, ist, alle Testmethoden innerhalb einer Klasse parallel auszuführen.

1

Versuchen Sie, Ihren forkMode von immer auf "nie" zu ändern. Dies wird nicht in ihrer Dokumentation erwähnt, aber Sie können fork plus parallel zu diesem Zeitpunkt nicht haben (wir fanden dies nach dem Durchsuchen des todsicheren Codes.)

Nur damit Sie wissen, werden Sie wahrscheinlich in Tests, die nicht sind thread-safe aufgrund der vielen test/unterstützenden Bibliotheken (easymock, powermock, etc.), die die Fähigkeit zur parallelen Durchführung der Tests ungültig machen.

4

Ich hatte das gleiche Problem, weil ich absolut sichere Version 2.7, nach dem Upgrade auf 2.12 mit der folgenden Konfiguration gearbeitet wurde unter Verwendung:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.12</version> 
    <configuration> 
    <parallel>classes</parallel> 
    <forkMode>perthread</forkMode> 
    <threadCount>4</threadCount> 
    </configuration> 
</plugin> 

Es gelaicht 4 Threads, die jeweils eine eigene JVM läuft.

+1

Diese Lösung hat einen Fehler, der in maven-surefire-plugin 2.13 behoben wurde. Überprüfen Sie diesen Thread für weitere Informationen: http://stackoverflow.com/questions/11098073/maven-surefire-failsafe-forkmode-perthread-is-not-working-a-workaround – ggarciao

0

Die todsichere 2.16 fixiert die parallele Ausführung in Bezug auf die JUnit-Tests.