2016-08-08 4 views
0

J'ai remarqué que parfois, lorsque vous exécutez maven sur Jenkins, le nombre de tests Jbehave exécutés varie d'une exécution à l'autre. Lors de l'analyse des journaux que je vois l'extrait suivant:Vérifiez que la génération de Maven échoue lorsque les tests échouent

Failed to run story stories/cancel.story 
java.lang.InterruptedException: stories/cancel.story 
    at org.jbehave.core.embedder.StoryRunner$RunContext.interruptIfCancelled(StoryRunner.java:616) 
    at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:514) 
    at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:479) 
    at org.jbehave.core.embedder.StoryRunner.runStepsWithLifecycle(StoryRunner.java:445) 
    at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305) 
    at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:220) 
    at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:181) 
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:235) 
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:207) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

Le problème est que lorsque les tests sont ignorés ou ne parviennent pas à fonctionner de cette façon la construction est toujours considéré comme un succès.

Y a-t-il une configuration de module d'extension maven surefire qui garantira que chaque fois que les tests échoueront, la construction entraînera une panne? Voici les configurations de build Maven Surefire

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.11</version> 
      <configuration> 
       <skip>true</skip> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.11</version> 
      <configuration> 
       <includes> 
        <include>**/*TestSuite.java</include> 
       </includes> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>integration-test</goal> 
         <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <version>2.9</version> 
     </plugin> 
     <plugin> 
      <groupId>net.thucydides.maven.plugins</groupId> 
      <artifactId>maven-thucydides-plugin</artifactId> 
      <version>${thucydides.version}</version> 
      <executions> 
       <execution> 
        <id>thucydides-reports</id> 
        <phase>post-integration-test</phase> 
        <goals> 
         <goal>aggregate</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>log4j</groupId> 
        <artifactId>log4j</artifactId> 
        <version>1.2.17</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-site-plugin</artifactId> 
      <version>3.2</version> 
      <configuration> 
       <reportPlugins> 
        <plugin> 
         <groupId>net.thucydides.maven.plugins</groupId> 
         <artifactId>maven-thucydides-plugin</artifactId> 
         <version>${thucydides.version}</version> 
        </plugin> 
       </reportPlugins> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Répondre

0

Votre maven-surefire-plugin Permet de sauter des tests complètement (avec <skip>true</skip>), si des tests sont en cours d'exécution avec maven-failsafe-plugin. Ce plug-in est censé ne pas s'arrêter en cas d'échec pendant integration-test, puis échouer uniquement sur la phase verify.

Donc, si vous voulez vraiment cette question répond:

Y at-il une configuration de plugin Maven Surefire qui assurera que chaque fois que les tests ne parviennent pas à exécuter les résultats de construction dans un échec?

qui est: vous voulez maven-surefire-plugin pour exécuter les tests, et non la maven-failsafe-plugin, alors la réponse est la suivante: retirer

 <configuration> 
      <skip>true</skip> 
     </configuration> 

de votre POM. Dans ce cas, vous n'avez pas non plus besoin de la configuration maven-failsafe-plugin, car les tests seraient exécutés deux fois.

Mais si votre objectif est d'obtenir maven-failsafe-plugin travailler, alors je pense que vous pouvez avoir l'une des questions suivantes:

  1. ne pas courir le bon objectif. Comme plug-in help states, vous devriez l'appeler comme

    mvn verify 
    
  2. Un vieux plug-in, ce qui est compatible avec le cadre de test que vous utilisez (la version actuelle est 2.19.1)

  3. Ou cette recommandation d'aide :

    pour très complexe construit, il peut être préférable de séparer les exécutions pour l'intégration test et vérifier objectifs:

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <version>2.19.1</version> 
        <executions> 
        <execution> 
         <id>integration-test</id> 
         <goals> 
         <goal>integration-test</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>verify</id> 
         <goals> 
         <goal>verify</goal> 
         </goals> 
        </execution> 
        </executions> 
    </plugin> 
    
+0

Je pense que cela pourrait fonctionner, mais ce que je cherchais était quelque chose le long des lignes du 3000> – RodN

+0

bien, puisque vous utilisez maven-failsafe-plugin, il exécute des tests de manière générique, ne sachant rien des histoires, ou jbehave en général (de son point de vue c'est juste un autre test JUnit/TestNG). Si vous voulez le passer comme paramètre de ligne de commande, et vous savez que JBehave peut le lire, vous pouvez le faire dans ' -Dyour.param = ...'.Mais aussi: avez-vous envisagé d'utiliser 'jbehave-maven-plugin' pour exécuter des tests au lieu de failsafe? il semble avoir 'storyTimeoutInSecs': http://jbehave.org/reference/stable/maven-goals.html –