Usando gtest en jenkins
googletest (5)
¿Está ejecutando el ejecutable de prueba con los indicadores correctos (es decir, --gtest_output=xml[:DIRECTORY_PATH/|:FILE_PATH]
)?
De 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.
Ejecuté exitosamente mi prueba de unidad con Google Test en Jenkins, pero no sé cómo mostrar el archivo .xml generado por gtest. Se dice que gtest satisface el formato JUnit, así que lo que establezco es el siguiente:
Pero termina con errores tras un edificio.
No se encontraron archivos de informe de prueba. ¿Error de configuración?
El paso de compilación ''Publicar informe de resultados de prueba de JUnit'' cambió el resultado de compilación a FALLO
Terminado: FALLO
Aquí hay una versión de Windows para convertir la prueba de Google "notRun" a junit "skipped" a través de Windows batch. Sé que hay formas más elegantes, pero esta solo requiere un 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%
)
El error en la página de configuración de Jenkins es un poco de una pista falsa.
Esencialmente, lo que sucede es que el trabajo de compilación no ha generado el archivo xml del informe de prueba. Entonces, obtienes este error:
Recording test results
No test report files were found. Configuration error?
Por supuesto, la ubicación debe estar configurada correctamente. Para eso, vea este post:
¿Cómo configurar los informes de prueba de Jenkins CI que trabajan con grails?
Entonces, ¿cómo solucionar el error? La clave es estudiar el resultado de la consola para verificar si las pruebas se ejecutaron correctamente. Es probable que no lo hayan hecho, y es por eso que el error ha ocurrido.
Una vez que haya realizado las pruebas con éxito, suponiendo que haya configurado correctamente la ubicación, debería estar bien.
Estás usando JUnit, así que será un proyecto Java. Notaré aquí en caso de que pueda ayudar a otros, que estábamos ejecutando Xcode. Las pruebas no se estaban ejecutando.
Enterrado en la salida de la consola Jenkins, justo por encima del error, estaba esta nota:
note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO.
Volviendo a Xcode, y configurando el indicador Prueba después de construir del objetivo UnitTests
en YES
, el truco se resolvió. Eso está debajo de la sección de Pruebas Unitarias . Por supuesto, también puede establecer el indicador en el nivel del Proyecto y cambiar los objetivos a ''Otros'', estableciendo un valor de $(inherited)
.
La respuesta de Fraser es buena y necesita un procesamiento adicional para convertir el gtest XML al formato JTest adecuado.
Primero le pide a gtest que muestre el resultado en XML usando:
mygtestapp --gtest_output=xml:gtestresults.xml
Luego, en un script debe agregar elementos adicionales para marcar correctamente las pruebas omitidas como tales. El procesador JTest de Jenkin requiere que una prueba omitida contenga el elemento <skipped> y no solo el estado de "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 ejecuta esto en un archivo por lotes de Windows, coloque 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 agregar en su archivo bat:
awk -f awk.progfile gtestresults.xml > gtestresults-skipped.xml
Finalmente, apunta el procesador JTest como un paso posterior a la compilación para leer el XML convertido:
# Publish JUnit Test Result Report
Test Report XMLs: gtestresults-skipped.xml
Su archivo de resultados no está almacenado en la ubicación correcta y el complemento Jenkins no puede encontrarlo. Después de que se ejecuten las pruebas y se genere el archivo XML, ¿lo almacena en algún lugar?
Le sugiero que intente hacer que funcione reemplazando result.xml con ''*'' (suponiendo que este sea el único archivo XML que se supone que se debe almacenar allí) y si esto va a funcionar, comience a trabajar en el nombre de archivo correcto.
Tuvimos el mismo problema en nuestra configuración. Asegurarse de que el resultado XML 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.