2017-10-12 13 views
1

J'ai une suite de tests de sélénium de concombre dans un projet Maven et j'ai récemment configuré le plug-in surefire pour exécuter mes tests en parallèle. Cela fonctionne très bien en exécutant simplement une commande semblable à celui-ci où test.runner.directory est une propriété déclarée dans le pom.xml pour maintenir la valeur du chemin du fichier à mes coureurs de test de concombre:Problèmes lors de l'exécution de tests de concombres parallèles de Maven dans un fichier de commandes Windows

mvn -Dtest.runner.directory=mytestsrunnerdirectory clean test 

Ensuite, je voulais pour écrire un fichier de commandes Windows pour envelopper cet appel. Voici donc ma tentative d'un fichier .bat, dans lequel le chemin du fichier aux coureurs de test est passé en paramètre:

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

Lorsqu'il est exécuté, cela devient aussi loin que l'exécution avec succès mes tests en parallèle, mais le script se bloque simplement. Je vois tous les résultats des tests apparaître dans la fenêtre et j'observe que tous les tests fonctionnent et se terminent, mais je n'ai jamais de message "Build Success" et le script n'obtient jamais l'impression de mon dernier message d'écho. Il se bloque indéfiniment après la fin du test final. Il est intéressant de noter que si je mets test.runner.directory dans un répertoire dans lequel il n'y a qu'un seul programme de test, tout fonctionne correctement (de toute évidence, cela ne lance qu'un seul thread de test) et le script se termine dans son intégralité. Mais il semble que le lancement de plusieurs threads le jette en quelque sorte et à un moment donné le focus ne peut pas être retourné à la fenêtre de commande d'origine.

Comme toujours, je serais extrêmement reconnaissant pour toute pensée/conseil. Je vous remercie.

+0

Les tests de concombre sont, à ma connaissance, des tests d'intégration qui signifient généralement que vous ne pouvez pas les exécuter en parallèle ... la question est pourquoi le test est-il suspendu? – khmarbaise

+0

Est-ce que les coureurs de test parallèle chance essaient d'écrire dans un seul fichier de rapport après la fin des tests? – Grasshopper

+0

Merci pour les commentaires. Juste pour clarifier, quand j'appelle maven directement à partir de la ligne de commande, c'est-à-dire pas à travers mon script batch, tous les tests se déroulent en parallèle et se terminent avec succès. Je ne fais l'expérience de cette suspension lorsque je tente de faire l'appel Maven à partir d'un script de lot. –

Répondre

1

Je suis arrivé autour de ce problème en utilisant un plug-in dans mon pom.xml: cucumber-jvm-parallel-plugin

A l'origine, je l'avais essayé de configurer surefire pour exécuter coureurs test que je me suis écrit, selon l'extrait ci-dessous: -

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

Selon ma question originale, cela a fonctionné mes tests OK, mais a fait que mon script de lot se bloque et ne se termine jamais. La nouvelle approche à l'aide cucumber-jvm-parallel-plugin est indiquée dans les extraits ci-dessous:

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

Ce plugin génère des coureurs de test à la volée, et surefire a juste besoin d'être configuré pour récupérer les coureurs de test générés:

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

Cela a fonctionné avec brio. Mes tests se déroulent en parallèle et le script se termine gracieusement sans être suspendu. Merci de votre intérêt pour ma question.