2009-05-21 9 views
31

Nous avons des centaines de tests définis pour notre cycle de vie de phase d'intégration-test dans maven, et ils prennent beaucoup de temps à finir.Comment exécuter un test individuel dans la cible de test d'intégration dans maven

Ce que je veux faire est d'exécuter un seul test dans le integration-test. J'ai essayé de faire:

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

mais cela ne fonctionne pas. Le -Dtest exécute uniquement les tests dans l'objectif de test unitaire, et non dans la phase de test d'intégration. J'ai essayé le -Dintegration-test=<my-test> à la place, et cela a été ignoré.

Y a-t-il un moyen de faire cela?


Ma configuration est:

<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

Je viens de le faire sur mon projet et cela a fonctionné. Y a-t-il une chance que vous puissiez poster la section surefire pluging du pom? –

+0

org.apache.maven.plugins maven-plugin-Surefire surefire-il integration-test Test aucun **/api/** ..... – Jalpesh

+0

Je ne peux pas poster sur la chose complète en raison d'une limitation. Mais c'est l'essentiel. – Jalpesh

Répondre

2

Je ne suis pas sûr de JUnit, mais pour TestNG la stratégie serait de définir un fichier XML de suite avec seulement un test, puis dans votre POM configurez le plugin surefire pour seulement l'exécuter. Dans votre POM, vous auriez quelque chose comme ça (disclaimer, c'est non testé):

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

Pour configurer le fichier de la suite, voir http://testng.org/doc/documentation-main.html

+0

Je suis d'accord avec James. TestNG convient pour cela, mais je pense qu'il est préférable d'utiliser des groupes de TestNG: @test (groupes = { "slow_test"}) Ensuite, dans votre suite testng: Ensuite, vous pouvez toujours inclure/exclure certains groupes –

3

j'eu du mal à travers, et je crée un profil supplémentaire pour utiliser quand je voulais lancer un seul test d'intégration. J'espère que j'ai extrait avec succès seulement la partie ici:

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

Maintenant, j'appelle maven avec le profil integrationTestSingle et -DfailIfNoTests=false -Dtest=NameOfTest, et il ne fonctionne pas des tests réguliers pendant le test régulier » "phase, et exécute juste le test NameOfTest pendant la phase de test d'intégration.

26

Si vous utilisez le Maven failsafe plugin, vous pouvez exécuter un seul test d'intégration via

mvn -Dit.test=your.TestCase verify 

Voir the failsafe plugin docs for more info.

+1

Cela a fonctionné pour moi avec 26/07/2013 plugin version 2.15 et Maven 3.1.0 malgré ce que dit l'autre réponse. L'autre réponse semble avoir été un bug. – ArtB

+1

vérifié pour mvn 3.2.5, plugin 2.18. exécute un test d'intégration: mvn integration-test -Dit.test = MyClassIT cependant, cela va aussi des tests unitaires: mvn vérifier -Dit.test = MyClassIT – user77115

+0

Soyez conscient que cela pourrait encore exécuter des tests unitaires. Pour désactiver l'exécution des tests unitaires, ajoutez '-Dtest = foo -DfailIfNoTests = false' (en supposant que foo n'existe pas), voir https://stackoverflow.com/questions/6612344/prevent-unit-tests-in-maven- mais-autoriser-intégration-tests. – asmaier

21

Le Failsafe documentation aurait spécifié le test comme ceci:

mvn -Dit.test=BrokenIT verify 

Cependant, -Dit.test ne semble pas fonctionner plus longtemps. Au contraire, le même paramètre utilisé pour spécifier un test Surefire fonctionnera également pour Failsafe. Par exemple:

mvn -Dtest=WorksIT verify 

J'ai déposé une bug (EDIT: qui a été fermé comme "ne peut pas Reproduire" à 2.12) pour corriger la documentation.

+2

Ceci devrait être accepté comme réponse. – whaley

+0

Impossible de déclencher build-helper-maven-plugin qui initialise l'environnement de test. – okwap

+0

@okwap Cela ressemble à quelque chose de particulier à la configuration de votre projet et de votre plugin, et non à un problème de test Failsafe/intégration. – Lyle

0

J'ai juste couru dans ce moi-même. Quelque chose comme ça a bien fonctionné pour moi:

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

L'astuce était de faire en sorte que le groupe de test a été mentionné avant la partie -Dtest.

2

il suffit d'ajouter -DfailIfNoTests=false fonctionne pour moi avec testNG. Quelque chose comme ceci:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false 
Questions connexes