2008-10-30 2 views
8

Wir hatten einen fortwährenden Bedarf hier, dass ich nicht herausfinden kann, wie man die Lagermaven 2 Werkzeuge und die Dokumentation anspricht.Gibt es eine Möglichkeit, lange Laufzeiten (z. B. Stresstests) zu trennen, damit sie nicht standardmäßig in Maven 2 ausgeführt werden?

Einige unserer Entwickler haben einige sehr lange laufende JUnit-Tests (normalerweise Stresstests), die unter keinen Umständen als regulärer Teil des Buildprozesses/nächtlichen Builds ausgeführt werden sollten.

Natürlich haben wir die todsichere Plugins Ausschlussmechanismus verwenden und sie nur aus dem Build Punt, sondern im Idealfall würden wir etwas lieben, dass der Entwickler sie nach Belieben durch Maven 2.

Antwort

11

Normalerweise würden Sie erlauben würde, laufen fügen Sie ein Profil, um Ihre maven-Konfiguration, die einen anderen Satz von Tests ausführt:

laufen diese mit mvn -Pintegrationtest installieren

<profile> 
     <id>integrationtest</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <argLine>-client -Xmx896m -XX:MaxPermSize=192m</argLine> 
         <forkMode>once</forkMode> 
         <includes> 
          <include>**/**/*Test.java</include> 
          <include>**/**/*IntTest.java</include> 
         </includes> 
         <excludes> 
          <exclude>**/**/*SeleniumTest.java</exclude> 
         </excludes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
     <activation> 
      <property> 
       <name>integrationtest</name> 
      </property> 
     </activation> 
    </profile> 
1

einen Integrationstest-Plugin verwenden wie die Super Helpful Integration Test Thingy Integra zu trennen Tests (lange Laufzeiten, systemisch) durch Unit Test (Puristen sagen 30 Sekunden max für alle echten Unit Tests zu laufen). Erstellen Sie zwei Java-Pakete für Ihre Komponententests im Vergleich zu Integrationstests.

Dann bindet nicht dieses Plugin eine Phase (der normale Maven-Lebenszyklus) und es nur ausgeführt, wenn es ausdrücklich als Ziel genannt wird, etwa so: mvn shitty:clean shitty:install shitty:test

<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>shitty-maven-plugin</artifactId> 
    </plugin> 
</plugins> 

diese Weise Ihrer normalen Entwickler wird nicht beeinträchtigt und Sie können Integrationstests nach Bedarf ausführen.

0

Eine weitere Option ist, dass der Stresstest erkennt, dass er in maven ausgeführt wird und nur ein- oder zweimal ausgeführt wird. d.h. sich in einen regulären Funktionstest verwandeln. Auf diese Weise können Sie überprüfen, ob der Code immer noch gut ist, aber nicht lange ausgeführt wird.

+1

wie ein Hack Riecht ein bisschen mich. –

+0

@MaartenBodewes in der Tat. –

4

zu Hinzufügen krosenvold ‚s Antwort, kein unerwartetes Verhalten zu gewährleisten, stellen Sie sicher, dass Sie auch ein Standardprofil haben, dass umfasst nicht standardmäßig aktiv ist die Integration oder Stresstests Sie in Ihrem speziellen Profil ausgeführt werden sollen.

<profile> 
    <id>normal</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <excludes> 
         <exclude>**/**/*IntTest.java</exclude> 
        </excludes> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
    </activation> 
</profile> 

Sie müssen ein Profil wie diese erstellen, einfach außerhalb eines Profils der todsicheren-Plugin-Eintrag wird das Profil sollte es mit ausgewählt werden, außer Kraft setzen:

mvn -P integrationtest clean install 
Verwandte Themen