2017-10-12 1 views
1

Ich habe eine Reihe von Cucumber Selenium-Tests in einem Maven-Projekt und habe kürzlich das todsichere Plugin für meine Tests parallel konfiguriert. Dies funktioniert, indem Sie einfach einen Befehl wie diesen ausgeführt wird, wo test.runner.directory ist eine Eigenschaft im pom.xml erklärte den Wert des Dateipfades zu meinem Gurke Test Läufer zu halten:Probleme parallel laufen Gurken-Tests von Maven in einer Windows-Batch-Datei

mvn -Dtest.runner.directory=mytestsrunnerdirectory clean test 

Als nächstes wollte ich Schreiben einer Windows-Stapeldatei, um diesen Aufruf zu umbrechen. Das ist also mein Versuch einer .bat Datei, in dem der Dateipfad zu den Testläufer wird als Parameter übergeben:

set testrunnerdirectory=%1 
echo Running Seleium tests with Maven. 
call mvn -Dtest.runner.directory=%testrunnerdirectory% clean test 
echo Maven build completed 

Wenn er ausgeführt wird, dies wird so weit wie erfolgreich meine Tests parallel laufen, aber dann Das Skript hängt einfach. Ich sehe die gesamte Ausgabe der Tests, die im Fenster erscheinen, und ich beobachte alle Tests, die erfolgreich ausgeführt und abgeschlossen wurden, aber ich erhalte nie eine Meldung "Build Success" und das Skript wird nie so weit gehen wie meine letzte Echomeldung gedruckt wird. Es bleibt einfach unbegrenzt, wenn der letzte Test abgeschlossen ist.

Interessanterweise, wenn ich test.runner.directory auf ein Verzeichnis mit nur einem einzigen Test-Runner setzen, funktioniert alles gut (offensichtlich startet dies nur einen einzigen Test-Thread) und das Skript wird in seiner Gesamtheit abgeschlossen. Aber es scheint, dass das Starten von mehreren Threads es irgendwie wirft und zu einem bestimmten Zeitpunkt kann der Fokus nicht auf das ursprüngliche Befehlsfenster zurückgeführt werden.

Wie immer wäre ich sehr dankbar für irgendwelche Gedanken/Ratschläge. Vielen Dank.

+0

Gurkentests sind nach meinem Wissen Integrationstests, was bedeutet, dass man sie normalerweise nicht parallel laufen lassen kann ... die Frage ist, warum hängt der Test? – khmarbaise

+0

Gibt es zufällige parallele Testläufer, die nach Abschluss der Tests versuchen, in eine einzelne Berichtsdatei zu schreiben? – Grasshopper

+0

Danke für die Kommentare. Nur um zu verdeutlichen, wenn ich maven direkt von der Kommandozeile aus anrufe, d. H. Nicht über mein Batch-Skript, laufen alle Tests parallel und werden erfolgreich abgeschlossen. Ich erfahre nur dieses Hängen, wenn ich versuche, den Maven-Aufruf von einem Stapel-Skript zu machen. –

Antwort

1

bekam ich um dieses Problem durch ein Plugin in meinem pom.xml: cucumber-jvm-parallel-plugin

Ursprünglich hatte ich versucht, todsicheren zu konfigurieren Test-Runners zu laufen, die ich selbst geschrieben hatte, gemäß dem Code-Schnipsel unten: -

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.20.1</version> 
      <configuration> 
       <forkCount>5</forkCount> 
       <reuseForks>false</reuseForks> 
       <testFailureIgnore>true</testFailureIgnore> 
       <includes> 
        <include>*TestRunner.java</include> 
       </includes> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>2.20.1</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

Laut meiner ursprünglichen Frage, das lief meine Tests OK, aber verursacht, dass meine Batch-Skript zu hängen und nie abgeschlossen. Der neue Ansatz cucumber-jvm-parallel-plugin verwendet, wird in den folgenden Schnipsel gezeigt:

 <plugin> 
      <groupId>com.github.temyers</groupId> 
      <artifactId>cucumber-jvm-parallel-plugin</artifactId> 
      <version>1.0.1</version> 
      <executions> 
       <execution> 
        <id>generateRunners</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>generateRunners</goal> 
        </goals> 
        <configuration> 
         <glue>mystepdefinitionspackage</glue> 
         <featuresDirectory>myfeatures</featuresDirectory> 
         <cucumberOutputDir>myoutput</cucumberOutputDir> 
         <format>json,html</format> 
         <tags>"@MyTag"</tags> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Dieses Plugin erzeugt Test-Runners on the fly und todsichere braucht nur diese generierten Test Runners zu holen konfiguriert werden:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.20.1</version> 
      <configuration> 
       <forkCount>10</forkCount> 
       <reuseForks>true</reuseForks> 
       <includes> 
        <include>**/Parallel*IT.class</include> 
       </includes> 
      </configuration> 
     </plugin> 

Das hat hervorragend funktioniert. Meine Tests werden parallel ausgeführt und das Skript wird ordnungsgemäß ausgeführt, ohne dass es hängen bleibt. Vielen Dank für Ihr Interesse an meiner Frage.