2012-02-16 4 views
7

He escrito varias pruebas XMLUnit (que se ajustan al marco JUnit) en groovy y puedo ejecutarlas fácilmente en la línea de comandos según el groovy doco pero no entiendo muy bien qué más tengo que hacer por él para producir la salida xml que necesita Jenkins/Hudson (u otra) para mostrar los resultados de aprobación/falla (como this) e informe detallado de los errores, etc. (como this). (disculpas a los propietarios de imágenes)¿Cómo puedo producir un informe de prueba de JUnit para pruebas groovy, adecuado para el consumo por Jenkins/Hudson?

Actualmente, mi guión patada de salida es la siguiente:

def allSuite = new TestSuite('The XSL Tests') 

//looking in package xsltests.rail.* 
allSuite.addTest(AllTestSuite.suite("xsltests/rail", "*Tests.groovy")) 

junit.textui.TestRunner.run(allSuite) 

y esto produce algo como esto:

Running all XSL Tests... 
.... 
Time: 4.141 

OK (4 tests) 

¿Cómo puedo hacer esto crear un xml informe de prueba JUnit archivo adecuado para ser leído por Jenkins/Hudson?

¿Debo comenzar las pruebas con un corredor diferente de JUnit?

He visto this responder pero me gustaría evitar tener que escribir mi propia salida de informe de prueba.

+1

¿Estás utilizando algunos frameworks de prueba? ¿Qué estás usando para construir el proyecto? –

+0

¿Hay alguna aversión al uso de una herramienta de compilación como Gradle/Maven/Ant? –

+0

@Eric Este es un proyecto paralelo y estaba buscando poner en marcha algo rápidamente. Sin embargo, puedo seguir por el camino del aprendizaje y el uso de Gradle tal como está en mi esfera de "cosas para aprender". –

Respuesta

4

Después de un poco de hackeo, tomé la sugerencia de Eric Wendelin y me fui con Gradle.

Para ello, he trasladado mis pruebas groovy unit a la estructura de directorios necesaria src/test/groovy /, con los recursos de soporte (entrada y archivos XML de salida esperados) yendo al directorio/src/test/resources /.

Todas las bibliotecas necesarias se han configurado en la compilación.archivo Gradle, tal como se describe (en su totalidad) aquí:

apply plugin: 'groovy' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.+' 

    groovy module('org.codehaus.groovy:groovy:1.8.2') { 
     dependency('asm:asm:3.3.1') 
     dependency('antlr:antlr:2.7.7') 
     dependency('xmlunit:xmlunit:1.3') 
     dependency('xalan:serializer:2.7.1') 
     dependency('xalan:xalan:2.7.1') 
     dependency('org.bluestemsoftware.open.maven.tparty:xerces-impl:2.9.0') 
     dependency('xml-apis:xml-apis:2.0.2') 
    } 
} 

test { 
    jvmArgs '-Xms64m', '-Xmx512m', '-XX:MaxPermSize=128m' 

    testLogging.showStandardStreams = true //not sure about this one, was in official user guide 

    outputs.upToDateWhen { false } //makes it run every time even when Gradle thinks it is "Up-To-Date" 
} 

Esto se aplica el complemento maravilloso, establece el uso experto de agarrar las dependencias indicadas y luego añade algunos valores adicionales a la tarea de "prueba" incorporada .

Una cosa adicional es la última línea que hace que Gradle ejecute todas mis pruebas todas las veces y no solo las que cree que son nuevas/modificadas, esto hace que Jenkins juegue bien.

También creé un archivo gradle.properties conseguir a través del proxy/firewall corporativo, etc:

systemProp.http.proxyHost=10.xxx.xxx.xxx 
systemProp.http.proxyPort=8080 
systemProp.http.proxyUser=username 
systemProp.http.proxyPassword=passwd 

Con esto, he creado un proyecto 'estilo libre' en Jenkins que las encuestas de nuestro repositorio Mercurial periódicamente y cada vez que alguien confirma un XSL actualizado al repositorio, se ejecutarán todas las pruebas.

Uno de mis objetivos originales era poder producir los gráficos estándar de aprobación/falla de Jenkins/Hudson y los informes JUnit, que es un éxito: Pass/Fail con JUnit Reports.

Espero que esto ayude a alguien más con requisitos similares.

0

Como usted está pidiendo a los fines de exponer el informe a Jenkins/Hudson, asumo que tiene una compilación Maven/Ant/etc que puede ejecutar. Si eso es cierto, la solución es simple.

En primer lugar, prácticamente no hay diferencia entre las pruebas Groovy y Java JUnit. Entonces, todo lo que tiene que hacer es agregar la tarea/plugin junit Ant/Maven a su compilación y hacer que ejecute sus pruebas de Groovy junit (tal como lo haría si estuvieran escritos en Java). Esa ejecución creará informes de prueba. Desde allí, simplemente puede configurar su compilación de Hudson/Jenkins para mirar el directorio donde se crean los informes de prueba durante el proceso de compilación.

+0

No, no estoy usando el framework de compilación como Maven o Ant, es simplemente una colección de pruebas unitarias. No hay compilación, solo una serie de pruebas con la esperanza de tener un recuento de aprobado/reprobado cada vez que se inicia. –

0

Puede escribir su propia RunListener personalizada (o SuiteRunListener). Todavía requiere que escriba un código, pero es mucho más limpio que el script al que le proporcionó un enlace. Si lo desea, puedo enviarle el código de un periodista JUnit que he escrito en JavaScript para Jasmine y puede "traducirlo" a Groovy.

2

puedo encontrar la manera más rápida para arrancar esto es con Gradle:

# build.gradle 
apply plugin: 'groovy' 

task initProjectStructure() << { 
    project.sourceSets.all*.allSource.sourceTrees.srcDirs.flatten().each { dir -> 
     dir.mkdirs() 
    } 
} 

A continuación, ejecute gradle initProjectStructure y mover su origen en src/main/groovy y pruebas para test/main/groovy.

Parece mucho (realmente es < 5 minutos de trabajo), pero obtienes muchas cosas gratis. Ahora puede ejecutar gradle test y ejecutará sus pruebas y producirá JUnit XML que puede usar en build/test-reports en su directorio de proyectos.

+1

Gracias por el pequeño empujón para usar Gradle. Mientras mi respuesta (claramente) resolvió mi problema, la recompensa de 50 puntos es tuya. –

+0

Gracias :) - Creo que te encantará Gradle. –

Cuestiones relacionadas