2009-05-21 15 views
31

Tenemos cientos de pruebas definidas para nuestro ciclo de vida de fase de prueba de integración en maven, y tardan mucho tiempo en finalizar.Cómo ejecutar una prueba individual en el objetivo de prueba de integración en maven

Lo que quiero hacer es ejecutar solo una prueba en el integration-test. Intenté hacer:

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

pero eso no funciona. El -Dtest ejecuta solo las pruebas en el objetivo de prueba de la unidad, no la fase de prueba de integración. Probé el -Dintegration-test=<my-test> en su lugar, y eso fue ignorado.

¿Hay alguna manera de hacerlo?


Mi configuración es:

<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> 
    ..... 
+0

Acabo de hacer esto en mi proyecto y funcionó. ¿Hay alguna posibilidad de que puedas publicar la sección de pluging segura del pom? –

+0

org.apache.maven.plugins maven-segura-plugin segura-it integración-test prueba ninguno **/api/** ..... – Jalpesh

+0

no puede publicar en la cosa completa debido a una limitación. Pero esa es la esencia de eso. – Jalpesh

Respuesta

2

No estoy seguro acerca de JUnit, pero para TestNG la estrategia sería definir un archivo XML de baño con sólo la prueba, y luego en su POM configura el plugin surefire para que solo se ejecute. En su POM, que tendría algo como esto (descargo de responsabilidad, esto es no probado):

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

Para configurar el archivo completo, ver http://testng.org/doc/documentation-main.html

+0

Estoy de acuerdo con James. TestNG es adecuado para eso, pero creo que es mejor utilizar grupos TestNG: @test (grupos = { "slow_test"}) Luego, en su suite TestNG: Entonces siempre se puede incluir/excluir determinados grupos –

3

luché a través de este, y creado un perfil adicional para usar cuando quería ejecutar solo una prueba de integración. Espero que he extraído con éxito sólo la parte derecha aquí:

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

Ahora, llamo experto con el perfil integrationTestSingle y con -DfailIfNoTests=false -Dtest=NameOfTest, y no se ejecuta ninguna de las pruebas regulares durante la prueba regular" "fase, y ejecuta solo la prueba NameOfTest durante la fase de prueba de integración.

26

Si está utilizando el Maven failsafe plugin, puede ejecutar una sola prueba de integración a través de

mvn -Dit.test=your.TestCase verify 

Ver the failsafe plugin docs for more info.

+1

Esto funcionó para mí en 07/26/2013 con plugin versión 2.15 y Maven 3.1.0 a pesar de lo que dice la otra respuesta. La otra respuesta parece haber sido un error. – ArtB

+1

verificado para mvn 3.2.5, complemento 2.18. corre prueba de una integración: integración mvn test -Dit.test = MyClassIT Sin embargo, esto también ejecuta las pruebas de unidad: mvn verificar -Dit.test = MyClassIT – user77115

+0

Tenga en cuenta que esto todavía puede ejecutar pruebas unitarias. Para desactivar la ejecución de pruebas unitarias, agregue '-Dtest = foo -DfailIfNoTests = false' (suponiendo que foo no existe), consulte https://stackoverflow.com/questions/6612344/prevent-unit-tests-in-maven- but-allow-integration-tests. – asmaier

21

El Failsafe documentation tendría que especifique la prueba de este modo:

mvn -Dit.test=BrokenIT verify 

Sin embargo, -Dit.test no parece funcionar por más tiempo. Por el contrario, el mismo parámetro utilizado para especificar una prueba Surefire también funcionará para Failsafe. Por ejemplo:

mvn -Dtest=WorksIT verify 

he presentado una bug (EDIT : que se cerró como "no se pueden reproducir" en 2,12) para corregir la documentación.

+2

Esto debe ser aceptado como la respuesta. – whaley

+0

No se puede activar build-helper-maven-plugin que inicia el entorno de prueba. – okwap

+0

@okwap Eso suena como algo particular para su proyecto y configuración de complemento, y no como un problema de prueba de integración/Failsafe. – Lyle

0

Acabo de toparme con esto yo mismo. Algo como esto ha funcionado bien para mí:

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

El truco consistía en asegurar que el grupo de prueba fue mencionado antes que la parte -Dtest.

2

acaba de agregar -DfailIfNoTests=false funciona para mí con testNG. Algo como esto:

mvn integration-test -Dtest=aITest -DfailIfNoTests=false 
Cuestiones relacionadas