2009-05-21 18 views
31

Abbiamo centinaia di test definiti per il ciclo di vita della fase di test di integrazione in Maven e richiedono molto tempo per terminare.Come eseguire il test individuale nella destinazione del test di integrazione in maven

Quello che voglio fare è eseguire un solo test nello integration-test. Ho provato a fare:

mvn -Dtest=<my-test> integration-test 

ma che non funziona. Lo -Dtest esegue solo i test nell'obiettivo di test dell'unità, non nella fase di test di integrazione. Ho provato invece lo -Dintegration-test=<my-test>, che è stato ignorato.

C'è un modo per farlo?


La mia configurazione è:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>surefire-it</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      <configuration> 
       <excludes> 
        <exclude>none</exclude> 
       </excludes> 
       <includes> 
        <include>**/api/**</include> 
       </includes> 
    ..... 
+0

Ho appena fatto questo sul mio progetto e ha funzionato. Qualche possibilità di postare la sezione plug surefire dal pom? –

+0

org.apache.maven.plugins Maven-infallibile-plug infallibile-it integrazione-test prova nessuno **/api/** ..... – Jalpesh

+0

io non possono inserire nella cosa piena causa di una limitazione. Ma questo è il succo di ciò. – Jalpesh

risposta

2

io non sono sicuro di JUnit, ma per TestNG la strategia potrebbe essere quella di definire un file XML interno con solo un test, e poi nella vostra POM configurare il plugin surefire per eseguirlo solo Nella tua POM, si dovrebbe avere qualcosa di simile (dichiarazione di non responsabilità, questo è non testato):

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>integration-test</phase> 
     <configuration> 
      <suiteXmlFiles> 
      <suiteXmlFile>single-test.xml</suiteXmlFile> 
      </suiteXmlFiles> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Per configurare il file Suite, vedere http://testng.org/doc/documentation-main.html

+0

Sono d'accordo con James. TestNG è adatto per questo, ma penso che sia meglio usare gruppi TestNG: @Test (gruppi = { "slow_test"}) Quindi nella vostra suite TestNG: lento Poi si può sempre includere/escludere particolari gruppi –

3

ho lottato attraverso questo, e ho creato un profilo aggiuntivo da utilizzare quando volevo eseguire solo un test di integrazione. Spero che ho estratto con successo solo la parte destra qui:

<profile> 
     <id>integrationTestSingle</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>surefire-it</id> 
          <phase>integration-test</phase> 
          <goals> 
           <goal>test</goal> 
          </goals> 
          <configuration> 
           <includes> 
            <include>**/integration/**/${test}.java</include> 
           </includes> 
           <skipTests>false</skipTests> 
          </configuration> 
         </execution> 
        </executions> 
        <configuration> 
         <argLine>-Xms256M -Xmx768M -XX:MaxPermSize=256M</argLine> 
        </configuration> 
       </plugin> 

       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default-test</id>         
          <configuration> 
           <skipTests>true</skipTests> 
          </configuration> 
         </execution> 
        </executions> 

       </plugin> 
      </plugins> 
     </build> 
    </profile> 

Ora, io chiamo Maven con il profilo integrationTestSingle e con -DfailIfNoTests=false -Dtest=NameOfTest, e non viene eseguito nessuno dei test regolari durante il test regolare" "fase e esegue solo il test NameOfTest durante la fase di test di integrazione.

26

Se si sta utilizzando il Maven failsafe plugin, è possibile eseguire un singolo test di integrazione tramite

mvn -Dit.test=your.TestCase verify 

Vedi the failsafe plugin docs for more info.

+1

questo ha funzionato per me su 2013/07/26 con plug-in versione 2.15 e Maven 3.1.0 nonostante ciò che dice l'altra risposta. L'altra risposta sembra essere un bug. – ArtB

+1

verificato per mvn 3.2.5, plug-in 2.18. test viene eseguito un'integrazione: mvn integrazione-test -Dit.test = MyClassIT tuttavia, questo viene eseguito anche prove di unità: mvn verificare -Dit.test = MyClassIT – user77115

+0

Essere consapevoli che questo potrebbe ancora eseguire unit test. Per disattivare l'esecuzione dei test di unità aggiungere '-Dtest = foo -DfailIfNoTests = false' (supponendo che foo non esista), vedere https://stackoverflow.com/questions/6612344/prevent-unit-tests-in-maven- ma-consentire-integrazioni-test. – asmaier

21

Il Failsafe documentation avrebbe specificato il test in questo modo:

mvn -Dit.test=BrokenIT verify 

Tuttavia, -Dit.test non sembra lavorare più a lungo. Piuttosto, lo stesso parametro utilizzato per specificare un test Surefire apparentemente funzionerà anche con Failsafe. Per esempio:

mvn -Dtest=WorksIT verify 

ho presentato una bug (EDIT : che è stato chiuso come "non può riprodurre" in 2.12) per correggere la documentazione.

+2

Questo dovrebbe essere accettato come risposta. – whaley

+0

Impossibile attivare build-helper-maven-plugin che avvia l'ambiente di test. – okwap

+0

@okwap Questo sembra qualcosa di particolare per il tuo progetto e la configurazione del plugin, e non un problema di test Failsafe/integrazione. – Lyle

0

Mi sono imbattuto in questo. Qualcosa di simile ha funzionato bene per me:

mvn -Pintegration-test -Dtest=<my-test> 

Il trucco era quello di assicurare che il test-gruppo è stato detto prima la parte -Dtest.

2

basta aggiungere -DfailIfNoTests=false funziona per me con testNG. Qualcosa del genere:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false 
Problemi correlati