2016-08-08 60 views
0

Ich habe festgestellt, dass manchmal, wenn Javen läuft auf Javen läuft die Anzahl der Jbehave-Tests, die von einem Lauf zum anderen laufen variieren. Wenn die Protokolle analysieren sehe ich den folgenden Ausschnitt:Stellen Sie sicher, Maven Build schlägt fehl, wenn Tests nicht ausgeführt werden

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) 

Das Problem ist, dass bei Tests übersprungen werden oder die Build auf diese Weise läuft immer noch nicht als Erfolg gewertet wird.

Gibt es eine Maven Surefire-Plugin-Konfiguration, mit der sichergestellt wird, dass bei fehlgeschlagenen Tests die Build-Ergebnisse fehlschlagen? Hier sind die Maven todsicheren Buildkonfigurationen

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

Antwort

0

Ihre maven-surefire-plugin gesetzt Tests vollständig überspringen (mit <skip>true</skip>), so Tests mit maven-failsafe-plugin ausgeführt werden. Dieses Plug-in soll bei einem Fehler während integration-test nicht stoppen und dann nur unter der verify Phase ausfallen.

Also, wenn Sie wirklich diese Frage wollen beantwortet:

Gibt es eine Maven todsichere Plugin-Konfiguration, das wird sicherstellen, wenn Tests fehlschlagen, die Build-Ergebnisse zu einem Fehler laufen?

Das heißt: Sie maven-surefire-plugin wollen die Tests laufen und nicht die maven-failsafe-plugin, dann lautet die Antwort:

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

aus Ihrem POM entfernen. In diesem Fall benötigen Sie auch keine Konfiguration maven-failsafe-plugin, da dies Ihre Tests nur zweimal ausführen würde.

Aber wenn Ihr Ziel ist maven-failsafe-plugin zur Arbeit zu kommen, dann denke ich, Sie eine der folgenden Fragen haben:

  1. nicht läuft das richtige Ziel. Als Plug-in help states, sollten Sie es als

    mvn verify 
    
  2. Eine alte Plug-In aufrufen, die nicht kompatibel mit Test-Framework ist Sie verwenden (aktuelle Version ist 2.19.1)

  3. Oder diese Hilfe Empfehlung :

    für sehr komplexe baut, kann es besser sein, die Ausführungen für die Integration-Test zu trennen und überprüfen Ziele:

    <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

ich denke, das funktionieren könnte, aber was ich suchte, war etwas entlang der Linien der 3000> – RodN

+0

Nun, da Sie maven-failsafe-plugin verwenden, führt es generische Tests durch, ohne etwas über Storys zu wissen, oder jbehave im Allgemeinen (aus seiner Sicht ist es nur ein weiterer JUnit/TestNG-Test). Wenn Sie es als Befehlszeilenparameter übergeben möchten und wissen, dass JBehave es lesen kann, können Sie dies in ' -Dyour.param = ...' tun.Aber auch: Haben Sie erwogen, 'jbehave-maven-plugin' zu verwenden, um Tests statt fehlersicher auszuführen? es scheint, hat 'storyTimeoutInSecs': http://jbehave.org/reference/stable/maven-goals.html –