Question

Je souhaite des tests d'intégration entièrement automatisés pour un projet Maven. Les tests d'intégration nécessitent qu'un programme externe (dépendant de la plate-forme) soit démarré avant d'être exécuté. Idéalement, le programme externe serait tué une fois les tests unitaires terminés, mais ce n'est pas nécessaire.

Existe-t-il un plugin Maven pour accomplir cela? Autres idées?

Était-ce utile?

La solution

Vous pouvez utiliser le plug-in antrun . À l'intérieur, vous utiliseriez exec apply .

Quelque chose comme ça.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <phase> <!-- a lifecycle phase --> </phase>
        <configuration>

          <tasks>
            <apply os="unix" executable="cmd">
              <arg value="/c"/>
              <arg value="ant.bat"/>
              <arg value="-p"/>
            </apply>
            <apply os="windows" executable="cmd.exe">
              <arg value="/c"/>
              <arg value="ant.bat"/>
              <arg value="-p"/>
            </apply>
          </tasks>

        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Ant supporte bien sûr des commandes spécifiques via la tâche de condition .

Autres conseils

Je travaille actuellement sur un plugin plus spécifique qui pourrait facilement être "dégradé". être un simple exécutant externe mais ... il y a pas mal de choses à considérer.

  1. Comment savez-vous que le processus a réellement commencé?
  2. Que faites-vous avec le code de retour?
  3. Comment vous assurez-vous que le plugin exécuteur s'exécute en premier (le lier à la phase de compilation-test)?

Je suis sûr qu'il y en aurait davantage si je commençais réellement à développer le plug-in, mais existe-t-il un besoin réel d'un exécuteur générique?

MISE À JOUR:

Je suppose qu'il y a ... il y a un excellent ensemble de plugins Maven chez CodeHaus. Voici celle que vous souhaitez: http://mojo.codehaus.org/exec-maven-plugin / .

Le plug-in cargo maven est une bonne solution si vous développez des servlets et souhaitez déployer le fichier WAR résultant pour les tests d'intégration.

Lorsque je le fais moi-même, je configure souvent un projet multi-module (bien que ce ne soit pas strictement nécessaire) et encapsule tous les tests d'intégration dans ce module. J'active ensuite le module avec des profils (ou non) pour qu'il ne bloque pas l'immédiat "ouais, je sais que je l'ai cassé". construit.

Voici le pom de ce module de test fonctionnel - faites-en ce que vous voulez:

<?xml version="1.0"?><project>
  <parent>
    <artifactId>maven-example</artifactId>
    <groupId>com.jheck</groupId>
    <version>1.5.0.4-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jheck.example</groupId>
  <artifactId>functional-test</artifactId>
  <name>Example Functional Test</name>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>com.jheck.example</groupId>
      <artifactId>example-war</artifactId>
      <type>war</type>
      <scope>provided</scope>
      <version>LATEST</version>
    </dependency>
    <dependency>
      <groupId>httpunit</groupId>
      <artifactId>httpunit</artifactId>
      <version>1.6.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <executions>
          <execution>
            <phase>integration-test</phase>
            <goals>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>0.3</version>
        <configuration>
          <wait>false</wait> <!-- don't pause on launching tomcat... -->
          <container>
            <containerId>tomcat5x</containerId>
            <log>${project.build.directory}/cargo.log</log>
            <zipUrlInstaller>
              <!--
              <url>http://www.apache.org/dist/tomcat/tomcat-5/v5.0.30/bin/jakarta-tomcat-5.0.30.zip</url>
               -->
               <!-- better be using Java 1.5... -->
              <url>http://www.apache.org/dist/tomcat/tomcat-5/v5.5.26/bin/apache-tomcat-5.5.26.zip</url>

              <installDir>${installDir}</installDir>
            </zipUrlInstaller>
          </container>
          <configuration>
            <!-- where the running instance will be deployed for testing -->
            <home>${project.build.directory}/tomcat5x/container</home>
          </configuration>
        </configuration>

        <executions>
          <execution>
            <id>start-container</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>start</goal>
              <goal>deploy</goal>
            </goals>
            <configuration>
              <deployer>
                <deployables>
                  <deployable>
                    <groupId>com.jheck.example</groupId>
                    <artifactId>example-war</artifactId>
                    <type>war</type>
                    <!-- <properties>
                      <plan>${basedir}/src/deployment/geronima.plan.xml</plan>
                    </properties> -->
                    <pingURL>http://localhost:8080/example-war</pingURL>
                  </deployable>
                </deployables>
              </deployer>
            </configuration>
          </execution>
          <execution>
            <id>stop-container</id>
            <phase>post-integration-test</phase>
            <goals>
              <goal>stop</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

Vous souhaitez probablement lier vos tests d'intégration réels à la phase de test d'intégration du cycle de vie Maven. Si vous utilisez un plug-in qui échoue en toute sécurité (comme le plug-in failafe portant le nom approprié) pour effectuer les tests, vous pouvez alors exécuter vos phases comme suit:

test de pré-intégration : démarrez une application externe (à l'aide du plug-in exec ou de l'une des autres suggestions proposées ici)

test d'intégration : exécutez les tests d'intégration à l'aide du plug-in de sécurité intégrée

.

test post-intégration : fermez l'application externe et effectuez tout autre nettoyage nécessaire

vérifier : demandez au plug-in de sécurité de vérifier les résultats du test et d'échouer à la création à ce stade

Il est assez simple d'utiliser le plug-in exec, l'astuce consiste à lancer votre application en arrière-plan . Assurez-vous que l'application est complètement opérationnelle avant de commencer les tests dans la phase suivante. Malheureusement, faire fonctionner votre application et s’assurer qu’elle est suffisamment opérationnelle en arrière-plan n’est pas toujours une tâche triviale, et la manière de le faire dépend de votre application. Cela implique souvent un code personnalisé dans l’application.

Voulez-vous démarrer un serveur d'applications? Consultez Cargo et son plugin Maven .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top