Pergunta

Eu quero totalmente automatizado testes de integração para um projeto Maven. Os testes de integração exigem que um programa externo (dependente de plataforma) é iniciado antes de executar. Idealmente, o programa externo seria morto após os testes de unidade terminar, mas não é necessário.

Existe um plugin Maven para alcançar este objetivo? Outras idéias?

Foi útil?

Solução

Você pode usar o antrun plugin. Dentro você usaria da formiga exec se candidatar tarefa.

Algo como isso.

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

comandos apoio Ant OS específicos do curso através do tarefa condição .

Outras dicas

Atualmente estou trabalhando em um plug-in mais específico que poderia facilmente ser "degradado" para ser um simples executor de tarefas externa, mas ... há algumas outras coisas a considerar.

  1. Como você sabe que o processo começou realmente?
  2. O que você faz com o código de retorno?
  3. Como você certificar-se o executor do plugin é executado primeiro (vinculá-lo a fase de teste-compilação)?

Eu tenho certeza que seria mais se eu realmente começou a desenvolver o plugin, mas há realmente uma necessidade de um executor genérico?

UPDATE:

Eu acho que há ... há um excelente conjunto de plugins Maven no Codehaus. Aqui está o que você quer: http://mojo.codehaus.org/exec-maven-plugin / .

O plugin de carga Maven é um bom caminho a percorrer se você está fazendo o desenvolvimento de servlet e deseja implementar o WAR resultando para testes de integração.

Quando eu faço isso mesmo, muitas vezes eu configurar um projeto multi-módulo (embora isso não seja estritamente nessecarily) e encapsular todos os testes de integração em que um módulo. Eu, então, ativar o módulo com perfis (ou não) para que ele não está bloqueando o imediato "sim, eu sei que eu quebrei" constrói.

Aqui está o pom daquele módulo de teste funcional - Faça dela o que você vai:

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

Você provavelmente deseja ligar os testes de integração reais para a fase de integração-teste do maven ciclo de vida. Se você usar um plugin que não seguro (como o apropriadamente chamado à prova de falhas plugin) para fazer o teste real, você pode então executar suas fases como esta:

pré-integração-test : iniciar a aplicação externa (usando o plugin exec ou uma das outras sugestões aqui)

integração-test : Execute os testes de integração reais usando o plug-in à prova de falhas

pós-integração-test : desligar o aplicativo externo e fazer qualquer outra limpeza necessária

verificar : Ter a prova de falhas plugin de verificar os resultados do teste e falhar a construir neste momento

É bastante simples de usar o plugin exec, o truque é fazer com que a aplicação iniciada up em segundo plano . Você deve ter cuidado para se certificar de que o aplicativo é totalmente antes de iniciar os testes na próxima fase. Infelizmente, ficando o seu aplicativo para cima e certificando-se de que é o suficiente durante a execução em segundo plano nem sempre é uma tarefa trivial, e os detalhes de como fazer isso dependerá de sua aplicação. Muitas vezes envolve código personalizado na aplicação.

Você deseja iniciar um servidor de aplicativos? Ter um olhar para Carga e sua Maven plug-in .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top