2012-07-18 22 views
19

Ejecuto con éxito mi prueba de unidad con prueba de google en Jenkins, pero no sé cómo mostrar el archivo .xml generado por gtest. Se dice que satisface GTEST el formato JUnit, así que lo que se propuso es la siguiente:Uso de gtest en jenkins

Screenshot

Pero termina con errores después de un edificio.

No test report files were found. Configuration error?
Build step 'Publish JUnit test result report' changed build result to FAILURE
Finished: FAILURE

+1

¿Está el resultado.xml en la raíz del espacio de trabajo? Si navega por su espacio de trabajo, debería poder encontrar el archivo result.xml y la ruta exacta en la que se encuentra. – Arnestig

+0

@sti: He agregado los errores exactos, y ¿dónde está la raíz del espacio de trabajo de Jenkins? –

Respuesta

7

¿Está ejecutando el ejecutable de prueba con las banderas correctas (es decir --gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])?

Desde la salida --help:

--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH] Generate an XML report in the given directory or with the given file name. FILE_PATH defaults to test_details.xml.

1

El error en la página de configuración de Jenkins es un poco de una pista falsa.

Básicamente, lo que sucede es que el archivo xml del informe de prueba no ha sido generado por el trabajo de compilación. Entonces, obtiene este error:

Recording test results 
No test report files were found. Configuration error? 

Por supuesto, la ubicación debe estar configurada correctamente. Por eso, ver este post:

How to configure test-reports on Jenkins CI working with grails?

Por lo tanto, la forma de corregir el error? La clave es estudiar la salida de la consola para verificar si las pruebas se ejecutaron correctamente. Lo más probable es que no lo hayan hecho, y es por eso que el error ha sucedido.

Una vez que las pruebas se ejecutan correctamente, suponiendo que haya configurado correctamente la ubicación, debería estar bien.

Está utilizando JUnit, por lo que será un proyecto de Java. Notaré aquí en caso de que pueda ayudar a otros, que estuviéramos ejecutando Xcode. Las pruebas no se estaban ejecutando.

enterrado en Jenkins salida de la consola justo por encima del error fue de esta nota:

note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO. 

que hace estallar de nuevo en Xcode, y el establecimiento de prueba del objetivo UnitTests después de generar bandera para YES hizo el truco. Eso está bajo la sección Unit Testing. También puede, por supuesto, establecer el indicador en el nivel Proyecto y cambiar el destino a 'Otro', estableciendo un valor de $(inherited).

1

Su archivo de resultados no se almacena en la ubicación correcta y el complemento de Jenkins no puede encontrarlo. Después de que se ejecutan las pruebas y se genera el archivo XML, ¿lo almacena en cualquier lugar?

Sugiero intentar hacerlo funcionar reemplazando result.xml con '*' (asumiendo que este es el único archivo XML que se supone almacenado allí) y si esto va a funcionar entonces empiece a trabajar con el nombre correcto del archivo.

Tuvimos el mismo problema en nuestra configuración. Asegurándose de que el XML de resultado generado se almacena donde el complemento espera que sea la clave. Puede determinar la raíz del espacio de trabajo desde la configuración de su proyecto.

15

La respuesta de Fraser es buena y necesita un procesamiento adicional para convertir el XML de prueba en el formato JTest adecuado.

Primero se pide GTEST a enviar el resultado a XML usando:

mygtestapp --gtest_output=xml:gtestresults.xml 

Luego, en una secuencia de comandos que necesita para añadir elementos adicionales a la bandera correctamente saltado pruebas como tales. procesador jtest de Jenkins requiere que una prueba omitido contiene el <saltado> elemento y no sólo el establecimiento de estado a "NOTRUN":

awk '{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;}' gtestresults.xml > gtestresults-skipped.xml 
mv gtestresults.xml gtestresults.off 

Si se ejecuta esto en un archivo de Windows por lotes, puso la acción awk dentro de un archivo para evitar problemas con las comillas awk.progfile:

{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;} 

Y crear añadir en su archivo bat:

awk -f awk.progfile gtestresults.xml > gtestresults-skipped.xml 

Por último apuntar el procesador jtest como un paso posterior a la generación de leer el código XML convertido:

# Publish JUnit Test Result Report 
Test Report XMLs: gtestresults-skipped.xml 
+0

Ahora también es posible analizar la salida de googletest con el plugin xUnit, opción "googletest 1.6". Parece que puede tratar con pruebas desactivadas sin magia 'awk', y funciona correctamente con googletest 1.7 también. – avtomaton

0

Aquí hay una versión del lote de Windows para convertir la prueba de google "notRun" a junit "omitida" a través de Windows Batch. Sé que hay formas más elegantes, pero esta solo requiere lote de Windows y hace el trabajo

rem convert gtest xml to junit compatible format (replace notRun by skipped) 
IF EXIST %INTEXTFILE% (
    IF EXIST %OUTTEXTFILE% (
     del %OUTTEXTFILE% 
     waitfor fileSystemToDoItsStuff /t 1 
    ) 
    FOR /f "tokens=1,* delims=¶" %%A IN ('"type %INTEXTFILE%"') DO (
     ECHO."%%A" | findstr /C:"DISABLED_">nul & IF ERRORLEVEL 1 (
      SET modified=%%A 
     ) ELSE (
      SET string=%%A 
      SET modified=!string:/^>=^>^<skipped /^>^</testcase^>! 
     ) 
     ECHO !modified!>> %OUTTEXTFILE% 
    ) 
    del %INTEXTFILE% 
    waitfor fileSystemToDoItsStuff /t 1 
    move %OUTTEXTFILE% %INTEXTFILE% 
) 
Cuestiones relacionadas