2016-01-25 1 views
1

Je ne pouvais pas sembler trouver quelque chose sur ce point, mais je suis curieux de savoir si je peux passer un argument lors de l'exécution pour passer tous nos projets tests E2E.Si l'argument dans le plugin Surefire maven, sauter E2E tests

Y a-t-il un moyen pour moi de faire quelque chose comme le bloc exclu séparé dans l'exemple de pom suivant?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>${argLine}</argLine> 
     <excludes> 

     <exclude unless="${skip.E2E.tests}> **/*E2E*.java</exclude> 

     <exclude>**/IT*.java</exclude> 
     </excludes> 
    </configuration> 
</plugin> 

Je pourrais simplement appeler mvn clean install -Dskip.E2E.tests=true. Quelqu'un a-t-il vu quelque chose comme ça?

Je suppose que je pouvais faire quelque chose comme ...

<exclude>${name.of.tests.to.exclude}</exclude> 

puis mvn clean install -Dname.of.tests.to.exclude=**/*E2E*.java mais je préférerais avoir un facile l'argument vrai ou faux de mettre plutôt que cela dans le cas où certains des tests que je veux sauter ne comprend pas E2E et je dois les ajouter à une liste.

+1

Je crois que le 'mvn load install' était probablement une faute de frappe, il n'y a pas de' load' phase dans Maven –

Répondre

2

Il est difficile de dire juste à partir de l'extrait de votre pom que vous montrez, mais il semble que vous utilisez surefire à la fois pour votre appareil et vos tests e2e. Au lieu de cela, vous devriez envisager d'utiliser le plugin failsafe pour e2e.

Un avantage est que les tests e2e seront exécutés dans une étape différente afin que vous obteniez le comportement recherchant par défaut. Ils sont exécutés pendant la phase de vérification de la construction du projet. Ainsi, vous pouvez exécuter mvn test pour exécuter des tests unitaires uniquement.

Vous pouvez configurer votre projet pour utiliser fail-safe comme ceci:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <version>2.19.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

les exécuter en utilisant: mvn verify

Exécution mvn install -DskipITs sautera les tests que d'intégration, tout en exécutant des tests unitaires.

Et l'exécution mvn install -DskipTests passera les tests d'intégration et unitaires.

+0

Merci pour cela. Je rencontrais des problèmes avec Jacoco et Powermock lorsque j'essayais de configurer un serveur sonarQube. L'un des problèmes que j'ai résolus en désactivant le plugin Failsafe. J'avais oublié de revenir en arrière et essayer de diviser nos tests E2E et UT dans leurs plugins respectifs. Merci d'avoir signalé cela. – Lencalot

1

Si vous souhaitez implémenter une telle condition, vous pouvez utiliser Maven profiles et ont deux configuration:

  • La valeur par défaut d'une partie de la construction normale, ne pas sauter les tests E2E
  • le profilé un saut eux

Le profil pourrait ensuite être activé lors de la propriété ou de l'activation directe.

À titre d'exemple vous pourriez avoir:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <argLine>${argLine}</argLine> 
       <excludes> 
        <exclude>**/IT*.java</exclude> 
       </excludes> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<profiles> 
    <profile> 
     <id>skip.E2E.tests</id> 
     <activation> 
      <property> 
       <name>skip.E2E.tests</name> 
       <value>true</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <argLine>${argLine}</argLine> 
         <excludes> 
          <exclude>**/*E2E*.java</exclude> 
          <exclude>**/IT*.java</exclude> 
         </excludes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Remarque: le plug-in par défaut Maven Surefire application à la construction normale puis un profilé.

Course à pied:

mvn clean install 

n'activerons le profil et votre build sauterez les tests.Lors de l'exécution:

mvn clean install -Pskip.E2E.tests 

ou

mvn clean install -Dskip.E2E.tests=true 

Activera le profil et en tant que telle ajouter l'exclusion à l'exécution des tests.

Donc, c'est exactement le scénario que vous cherchiez, je présume.


Alternativement et comme suggéré par @AndrewEisenberg dans la autre réponse, vous pouvez utiliser le Maven Failsafe Plugin pour différents types de tests. Les deux principales différences sont les suivantes: il a différentes liaisons de phase ET lorsqu'il échoue, il le fait de manière plus sûre. A partir de la documentation officielle:

Si vous utilisez le plugin Surefire pour les tests en cours d'exécution, lorsque vous avez un échec de test, la construction s'arrêtera à la phase-test d'intégration et de votre environnement de test d'intégration ne sera pas ont été démolis correctement. Le plugin Failsafe est utilisé pendant les phases d'intégration-test et de vérification du cycle de vie de la build pour exécuter les tests d'intégration d'une application. Le Failsafe Plugin n'échouera pas la construction durant la phase d'intégration-test, permettant ainsi l'exécution de la phase de post-intégration-test

+1

Une autre chose importante est que maven-failsafe-plugin a un schéma de nommage différent pour le test .... – khmarbaise

+0

Merci pour ce post, cela correspond certainement à ce que je demandais. Si j'ai des problèmes dans le futur où je ne peux pas utiliser une déclaration conditionnelle (comme on peut le faire à l'intérieur des tâches de pompier) cela me sera d'une grande aide. Cependant, après avoir lu @AndrewEisenbergs réponse, je crois que ce serait une façon plus conventionnelle de résoudre ce problème, pas besoin de réinventer la roue;) – Lencalot