4

Ausführen von mvn clean install auf meinem Eltern POM baut alle Untermodule und führt die zugehörigen Junit-Tests. Es führt die Integrationstests nicht aus.Erstellen Eltern Pom und führen spezifische Integration Test in Jenkins durch Maven?

Nachdem ich die Junits erstellt und ausgeführt habe, möchte ich einen bestimmten Integrationstest in einem bestimmten Submodul ausführen.

Ich verwende folgenden Befehl ein:

mvn clean install -DTest=integrationTestName 

Der Auftrag schlägt mit No Test Found Fehler während der Bauphase.

Ich habe auch versucht

mvn clean install -DTest=integrationTestName -pl=sub-module-name 

verwenden, aber diese baut nur meine Sub-Modul Integrationstest mit.

Frage: Wie wird ein einzelner Integrationstest eines bestimmten Moduls ausgeführt?

Antwort

4

Ich nehme an, Sie versuchten die test Option (Kleinbuchstaben) des Maven Surefire Plugins, um einen bestimmten Test aufzurufen, den Surefire nicht im ersten Modul des Reaktor Build finden konnte und daher fehlschlägt.

Ich nehme auch an Integrationstests werden von der Maven Failsafe Plugin ausgeführt. Wenn nicht, sollten sie, wie in der offiziellen Dokumentation erwähnt:

Das Failsafe-Plugin wurde entwickelt, um Integrationstests durchzuführen, während das Surefire-Plugin für Unit-Tests ausgelegt ist. ... Wenn Sie das Surefire-Plugin zum Ausführen von Tests verwenden, wird der Build bei einem Testfehler in der Phase integration-test angehalten und Ihre Integrationstestumgebung wurde nicht ordnungsgemäß abgebaut. .. Das Failsafe-Plugin wird den Build während der integration-test-Phase nicht abbrechen, wodurch die post-integration-test-Phase ausgeführt werden kann.

Um es kurz zu machen: es ist sicherer und viel robuster zu tun.

Obwohl die Plugin-Konfiguration Eintrag für das Maven Failsafe Plugin auch test ist, ist die entsprechende Befehlszeilenoption it.test, so sollten Sie stattdessen laufen:

mvn clean install -Dit.test=SampleIT 

Wo SampleIT ist ein Integrationstest (beachten Sie den Standard IT Suffix, recognized by default von Failsafe.

Die offizielle Running a Single Test Dokumentation auch weitere Details Tests auf offene Einzel Integration bietet.

Hinweis: Der obige Aufruf funktioniert, wenn Sie keine anderen Integrationstests in anderen Modulen des Builds durchführen. Andernfalls wird es nicht früher gefunden (bevor das betreffende Modul gefunden wird).

Wenn Sie Surefire zum Ausführen des betreffenden Integrationstests verwenden (Sie sollten dies auch nicht) oder mehrere Module mit Integrationstests ausführen, sollten Sie dann ein Profil im betreffenden Modul konfigurieren, das sich um diesen spezifischen Aufruf kümmert , so etwas wie, wie folgend:

<profiles> 
    <profile> 
     <id>run-single-it-test</id> 
     <activation> 
      <property> 
       <name>single.it.test</name> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <version>2.19.1</version> 
        <configuration> 
         <test>${single.it.test}</test> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>integration-test</goal> 
           <goal>verify</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Und dann die Build aufrufen, wie folgend:

mvn clean install -Dsingle.it.test=SampleIT 

als solche Maven wird für die single.it.test pro auf die Existenz eines Wertes activate the profile basiert Perty und übergeben Sie es an die test Eigenschaft des Failsafe Plugins (oder der Surefire, wenn es der Fall war), wird Failsafe jeden anderen Integrationstest für diese Ausführung ignorieren und andere Module würde keine Auswirkungen (ignorieren diese Eigenschaft) leiden.

2

Die Antwort von A_Di-Matteo liefert Ihnen den größten Teil des Weges, aber Sie benötigen die folgende Konfiguration für maven-surefire-plugin, um alle Unit-Tests zu unterdrücken.

<profiles> 
    <profile> 
     <id>run-single-it-test</id> 
     <activation> 
      <property> 
       <name>single.it.test</name> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <skipTests>true</skipTests> 
         <failIfNoTests>false</failIfNoTests> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>test</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <configuration> 
         <test>${single.it.test}</test> 
         <failIfNoTests>false</failIfNoTests> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>integration-test</goal> 
           <goal>verify</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles>