web-dev-qa-db-fra.com

Comment exécuter un test individuel dans la cible de test d'intégration dans maven

Nous avons défini des centaines de tests pour notre cycle de vie d'intégration-tests dans maven, et leur exécution prend beaucoup de temps.

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

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

mais ça ne marche pas. Le -Dtest exécute uniquement les tests de l'objectif de test unitaire, pas 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 ça ? 


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> 
    ..... 
38
Jalpesh

Si vous utilisez le plugin Maven Failafe , vous pouvez exécuter un seul test d'intégration en définissant la propriété it.test sur votre nom de classe de test complet:

mvn -Dit.test=your.TestCase verify

Voir les docs du plug-in de sécurité pour plus d'informations .

32
A Lee

La Documentation Failsafe voudriez-vous spécifier le test de la manière suivante:

mvn -Dit.test=BrokenIT verify

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

mvn -Dtest=WorksIT verify

J'ai classé un bug ( EDIT: qui était fermé en tant que "Cannot Reproduce" dans 2.12) pour corriger la documentation.

25
Lyle

J'ai eu du mal à résoudre ce problème et j'ai créé un profil supplémentaire à utiliser lorsque je souhaitais exécuter un seul test d'intégration. J'espère que j'ai réussi à extraire juste la bonne 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 avec -DfailIfNoTests=false -Dtest=NameOfTest. Il n'exécute aucun des tests habituels pendant la phase de test habituelle et exécute uniquement le test NameOfTest pendant la phase de test d'intégration.

3
Peter Cooper Jr.

Je ne suis pas sûr de JUnit, mais pour TestNG, la stratégie consisterait à définir un fichier XML de suite avec un seul test, puis, dans votre POM, configurez le plugin surefire pour l'exécuter uniquement. Dans votre POM, vous auriez quelque chose comme ceci (disclaimer, ceci n'est pas 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

2
James Kingsbery

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

mvn integration-test -Dtest=aITest -DfailIfNoTests=false
2
Fang Zhen

Je suis juste tombé dessus moi-même. Quelque chose comme ça a bien fonctionné pour moi:

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

L'astuce consistait à s'assurer que le groupe test était mentionné avant la partie -Dtest.

0
filename.exe