Test d’intégration avec le plugin Maven Cargo

Test d'intégration avec le plugin Maven Cargo

La nécessité de mettre en place des tests d'intégration est un besoin très courant dans le cycle de vie d'un projet. Heureusement, Maven a un support intégré pour ce scénario exact, avec les phases suivantes du cycle de vie de construction par défaut (à partir des Mavendocumentation): [more-134] #

  • pre-integration-test:Perform actions required before integration tests are executed. This may involve things such as setting up the required environment.

  • integration-test:Process and deploy the package if necessary into an environment where integration tests can be run.

  • post-integration-test:Perform actions required after integration tests have been executed. This may including cleaning up the environment.

Tout d'abord, lemaven-surefire-plugin est configuré de sorte queintegration tests are excluded du cycle de vie de construction standard:


   org.apache.maven.plugins
   maven-surefire-plugin
   2.17
   
      
         **/*IntegrationTest.java
      
   

Exclusions sont effectués via des expressions de chemin de style fourmi, donc tous les tests d'intégration doivent suivre ce modèle et se terminer par“IntegrationTest.java ».

Ensuite, lecargo-maven2-plugin est utilisé, carCargo est livré avec une prise en charge de premier ordre pour les serveurs Web intégrés. Bien entendu, si l'environnement du serveur nécessite une configuration spécifique, cargo sait également comment construire le serveur à partir d'un package archivé et le déployer sur un serveur externe.


   org.codehaus.cargo
   cargo-maven2-plugin
   1.4.8
   
      
         jetty8x
         embedded
      
      
         
            8080
         
      
   

Un serveur Web Jetty 8 intégré est défini et écoute sur le port 8080.

Dans la nouvelle version de cargo (1.1.0 et plus), la valeur par défaut dethe wait flag a été changée enfalse, pourcargo:start. Cet objectif ne doit être utilisé que pour exécuter des tests d'intégration et est lié au cycle de vie Maven; pour le développement, l'objectifcargo:run doit être exécuté à la place - qui await=true.

Pour que la phase mavenpackage génère un fichierdeployable war, le packaging du projet doit être:<packaging>war</packaging>.

Ensuite, un nouveauintegrationMaven profile est créé pour permettre l'exécution des tests d'intégrationonly lorsque ce profil est actif, et non dans le cadre du cycle de vie de construction standard.


   
      integration
      

         
            ...
         

      
   

C'est ce profil qui contiendra toute la configuration restante.

Désormais, le serveur Jetty est configuré surstart dans la phasepre-integration-test et surstop dans la phasepost-integration-test.


   org.codehaus.cargo
   cargo-maven2-plugin
   
      false
   
   
      
         start-server
         pre-integration-test
         
            start
         
      
      
         stop-server
         post-integration-test
         
            stop
         
      
   

Cela garantit que l'objectifcargo:start et les objectifscargo:stop seront exécutés avant et après la phaseintegration-test. Notez que comme il existe deux définitions individuelles deexecution, l'élémentid doit être présent (et différent) dans les deux, afin que Maven puisse accepter la configuration.

Ensuite, la configuration demaven-surefire-plugin doit être remplacée dans le profil deintegration, de sorte que les tests d'intégration qui ont été exclus dans le cycle de vie par défaut sont désormaisincluded et s'exécutent:


   
      org.apache.maven.plugins
      maven-surefire-plugin
      
         
            integration-test
            
               test
            
            
               
                  none
               
               
                  **/*IntegrationTest.java
               
            
         
      
   

Il y a quelques choses à noter:

1. L'objectiftest dumaven-surefire-plugin est exécuté en phaseintegration-test; à ce stade, Jetty est déjà démarré avec le projet déployé, les tests d'intégration doivent donc s'exécuter sans problème.

2. Les tests d'intégration sont maintenantincluded dans l'exécution. Pour ce faire, les exclusions sont également remplacées, en raison de la façon dont Maven gère les configurations de plug-in dans les profils. La configuration de base n'est pas complètement remplacée, mais complétée par de nouveaux éléments de configuration à l'intérieur du profil. Pour cette raison, la configuration d'origine de<excludes>, qui excluait les tests d'intégration en premier lieu, est toujours présente dans le profil et doit être remplacée, sinon elle entrerait en conflit avec la configuration de<includes> et le les tests ne s'exécuteraient toujours pas.

3. Notez que, puisqu'il n'y a qu'un seul élément<execution>, il y ano need for an id à définir.

L'ensemble du processus peut maintenant s'exécuter:

mvn clean install -Pintegration

Conclusion

La configuration étape par étape de Maven couvre l’ensemble du processus de configuration du processus d’intégration dans le cadre du cycle de vie du projet.

Généralement, cela est configuré pour s'exécuter dans un environnement d'intégration continue, de préférence après chaque validation. Si le serveur CI a déjà un serveur qui utilise et utilise des ports, la configuration cargo devra faire face à ce scénario, que je couvrirai dans un prochain article.

Pour une configuration entièrement opérationnelle de ce mécanisme, extrayez lesREST GitHub project.

Egalementcheck out this article pour les bonnes pratiques de structuration d'un projet et d'organisation des tests unitaires et d'intégration.