2010-08-30 28 views
8

usando Maven surefire, no puedo realizar la ejecución de prueba paralela. Es decir, cada uno de mis casos de prueba se ejecuta en una JVM de serapato, de ahí la bifurcación. Además, quiero que mis casos de prueba se ejecuten en paralelo. la primera parte funciona sin problemas: puedo ejecutar cada caso de prueba en su propia JVM. la segunda parte, sin embargo, sigue siendo un desafío para mí. No he logrado que funcione la ejecución paralela de casos de prueba. Así es como se ve mi declaración como complemento:Maven Surefire: no se puede realizar la ejecución de prueba paralela

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <parallel>methods</parallel> 
      <forkMode>always</forkMode> 
       <argLine>-Xms512m -Xmx512m</argLine> 
     </configuration> 
</plugin> 

He intentado ambos métodos y clases, pero no he ver ninguna paralelización. Mi versión 4.7 JUnit es como se muestra en la declaración depency:

<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>compile</scope> 
    </dependency>    

Cualquier ayuda sería muy appricated.

Gregoire.

Respuesta

7

creo que se supone que utilizar el parámetro threadCount cuando se utiliza el parallel modo:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <forkMode>always</forkMode> 
     <argLine>-Xms512m -Xmx512m</argLine> 
     <parallel>methods</parallel> 
     <threadCount>4</threadCount> 
    </configuration> 
    </plugin> 
2

Asegúrate de que tienes un mensaje de registro algo como esto

[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true} 

Justo antes de esta partida:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 

Este mensaje indica que el proveedor paralelo de seguro fijo está activo.

Si no está presente, surefire puede estar recogiendo una versión diferente de junit de lo que piensas. Cualquier cosa por debajo de 4.7 no funcionará. Ejecute mvn dependency: tree para verificar qué versión (es) están presentes.

También debe actualizar a surefire 2.6 ya que se han solucionado varios errores menores relacionados con la ejecución en paralelo. Por la misma razón, debe usar el último junit.

+0

¿No quieres que perCoreThreadCount sea cierto? De lo contrario, tener threadCount 1 significa que está ejecutando en paralelo con solo un hilo, es decir, serial? – Nicolai

+0

No, desea distribuir los subprocesos en cada núcleo disponible, no todos los subprocesos en un núcleo. Desafortunadamente, establecen el valor predeterminado en perCoreThreadCount = true, ejecutando todos los hilos en un núcleo. – rwst

0

¿Estás seguro de que no está funcionando? Es posible que no ganes mucha velocidad si tus pruebas no contienen muchos métodos de prueba. Con forkMode = always, lo mejor que puedes hacer es ejecutar todos los métodos de prueba dentro de una clase, en paralelo.

1

Intente cambiar su forkMode de siempre a "nunca". No constar en su documentación, pero no se puede tener tenedor además en paralelo en este momento (encontramos esto después de excavar a través del código de éxito seguro.)

Para que lo sepas, es probable que correr en pruebas que no son seguro para hilos debido a muchas bibliotecas de prueba/soporte (easymock, powermock, etc.) invalidando la capacidad de realizar pruebas paralelas.

4

he tenido el mismo problema, porque yo estaba usando la versión 2.7 de éxito seguro, después de la actualización a 2.12 funcionó con la siguiente configuración:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.12</version> 
    <configuration> 
    <parallel>classes</parallel> 
    <forkMode>perthread</forkMode> 
    <threadCount>4</threadCount> 
    </configuration> 
</plugin> 

que dio lugar a 4 hilos, cada una ejecutando su propio JVM.

+1

Esta solución tiene un error que se resolvió en maven-surefire-plugin 2.13. Consulte este hilo para obtener más información: http://stackoverflow.com/questions/11098073/maven-surefire-failsafe-forkmode-perthread-is-not-working-a-workaround – ggarciao

0

El surefire 2.16 arregló la ejecución paralela con respecto a las pruebas JUnit.

Cuestiones relacionadas