2012-08-10 9 views
23

Tengo una compilación multiproyecto con pruebas en subproyectos y en un proyecto principal. La creación se agrega para que el proyecto principal ejecute todas las pruebas en proyectos secundarios.¿Cómo desactivar la ejecución paralela de pruebas para compilaciones de proyectos múltiples?

de haberla configurado de manera que no hay ejecución paralela de las pruebas, tanto en los sub-proyectos y el proyecto principal, a través de

parallelExecution in Test := false 

Sin embargo, tengo la sensación de que las pruebas que se extienden a lo largo de múltiples proyectos son RAN en paralelo. En el caso de uno de los subproyectos, esto es un problema porque muta el estado en una base de datos de prueba al mismo tiempo, lo que hace que la prueba falle.

¿Alguna idea sobre cómo cambiar globalmente la ejecución paralela de pruebas, entre proyectos?

Respuesta

24

Creo que se puede aplicar un ajuste entre los proyectos utilizando alcance ThisBuild, como

parallelExecution in ThisBuild := false 

No sé si se puede combinar eso con alcance Test, pero podría no ser necesario.

+0

Lo siento, soy un poco nuevo en Scala y me enfrenté al mismo problema: ¿dónde debería poner esta línea? ¿A qué archivo del proyecto? – kirhgoff

+0

Lo más fácil es ponerlo en 'build.sbt' (ese archivo se usa incluso si tiene una configuración completa en' project/Build.scala') –

+0

¡Gracias! Me lo imaginé, demasiado apresurado para preguntar en lugar de pensar :). De todos modos, gracias – kirhgoff

4

Véase mi respuesta aquí How to run subprojects tests (including setup methods) sequentially when testing

Hay otra manera de prevenir la ejecución en paralelo. Usted puede hacer las tareas de prueba de los diferentes proyectos dependen unos de otros:

test in Project2 := (test in Project2).dependsOn(test in Project1).value 
parallelExecution in Test in Project2 := false 
+2

Esto no funciona para mí: obtengo 'Referencias a configuraciones indefinidas: Project2/*: prueba de Project2/*: test (/Users/the21st/Work/Project2/build.sbt:36) Quisiste decir Project2/web-assets-test: test? ' – the21st

13

para restringir el número de forma simultánea ejecución de pruebas en todos los proyectos, el uso:

concurrentRestrictions in Global += Tags.limit(Tags.Test, 1) 

Ver sbt documentation

Ver discussion

0

Otra posibilidad, basada en https://stackoverflow.com/a/27068019/1922026, es definir un alias de comando en el proyecto raíz :

.settings(addCommandAlias("test", ";s1/test;s2/test;s3/test"): _*) 

donde s1, s2 y s3 ​​son los subproyectos. Cuando esté en el proyecto raíz y ejecute "prueba", las pruebas se ejecutarán secuencialmente y en el orden definido.

Cuestiones relacionadas