maven 2 - plugin - Cómo ejecutar una prueba individual en el objetivo de prueba de integración en maven
maven test profile (6)
Acabo de toparme con esto yo mismo. Algo como esto funcionó bien para mí:
mvn -Pintegration-test -Dtest=<my-test>
El truco consistía en asegurarse de que el grupo de prueba se mencionara antes de la parte de "prueba".
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.
Lo que quiero hacer es ejecutar solo una prueba en la prueba de integration-test
. Intenté hacer:
mvn -Dtest=<my-test> integration-test
Pero eso no funciona. El -Dtest
ejecuta solo las pruebas en el objetivo de la prueba de unidad, no en la fase de prueba de integración. Intenté -Dintegration-test=<my-test>
lugar, y eso fue ignorado.
Hay una manera de hacer eso ?
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>
.....
La documentación de Failsafe haría que especifiques la prueba de la siguiente manera:
mvn -Dit.test=BrokenIT verify
Sin embargo, -Dit.test no parece funcionar más. 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 archivado un bug ( EDITAR: que se cerró como "No se puede reproducir" en 2.12) para corregir la documentación.
Luché a través de esto y creé un perfil adicional para usar cuando quería ejecutar solo una prueba de integración. Espero haber extraído con éxito la parte correcta 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 a maven con el perfil integrationTestSingle y con -DfailIfNoTests=false -Dtest=NameOfTest
, y no ejecuta ninguna de las pruebas regulares durante la fase de "prueba" normal, y ejecuta solo la prueba NameOfTest
durante la prueba de integración fase.
No estoy seguro acerca de JUnit, pero para TestNG la estrategia sería definir un archivo XML suite con solo una prueba, y luego en su POM configurar el plugin surefire para que solo se ejecute. En tu POM, tendrías algo como esto (descargo de responsabilidad, esto no se ha 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 de suite, vea http://testng.org/doc/documentation-main.html
Si está utilizando el complemento Maven failsafe , puede ejecutar una única prueba de integración estableciendo la propiedad it.test
en su nombre de clase de prueba totalmente calificado:
mvn -Dit.test=your.TestCase verify
Consulte los documentos del complemento de failsafe para obtener más información .
solo agrega -DfailIfNoTests=false
funciona para mí con testNG. Algo como esto:
mvn integration-test -Dtest=aITest -DfailIfNoTests=false