Pregunta

EDITAR : Google ha solucionado este problema en gtest 1.4.0; consulte el informe de error original para obtener más información.

Recientemente cambié a gtest para mi marco de prueba de C ++, y una gran característica que actualmente no puedo usar es la capacidad de generar informes de prueba XML de estilo JUnit, que luego podrían ser leídos por nuestro Hudson servidor de compilación.

La salida XML generada por el paquete de prueba gtest parece legítima:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
...etc.
    </testsuite>
</testsuite>

También intenté agregar una tarea JUnitReport a mi script de compilación de hormigas, que funciona bien y genera XML de esta manera:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite tests="370" failures="0" disabled="0" errors="0" time="45.61" name="AllTests">
    <testsuite name="application" tests="7" failures="0" disabled="0" errors="0" time="8.953">
        <testcase name="zero_tasks_on_bootup" status="run" time="0" classname="application" />
    ...etc.
    </testsuite>
 </testsuite>

El problema es que, cada vez que le digo a Ant que publique los resultados de la prueba JUnit, y luego lo apunto al XML del resultado de la prueba sin formato, o al resultado compilado generado en la tarea Ant JUnitReport, Hudson siempre se queja de no encontrar resultados de la prueba allí .

No soy un chico de Java, así que no puedo decir qué está pasando aquí, y no puedo encontrar un ejemplo de cómo debería ser el JUnit XML. ¿Alguien puede ayudarme a señalarme en la dirección correcta?

¿Fue útil?

Solución 2

Editar : la prueba de Google ha solucionado este problema, que se incluye en la versión gtest 1.4.0. Consulte el informe original de errores para obtener más información.

Bah! Finalmente encontré la causa de este problema: es porque gtest produce un archivo XML gigante para todos los resultados de la prueba, y Hudson espera un informe de prueba XML por clase. He escrito una secuencia de comandos perl como solución para este problema . Para usarlo, debe hacer un objetivo en su script ant xml que se parece a esto:

<target name="runtests">
  <exec executable="wherever/${ant.project.name}Test" failonerror="false" dir="tests">
    <arg value="--gtest_output=xml:${build.dir}\reports\${ant.project.name}.xml"/>
  </exec>
  <!-- Workaround for broken gtest output -->
  <mkdir dir="${build.dir}/reports/output"/>
  <exec executable="perl" failonerror="false" dir="tests">
  <arg value="gtest-hudson.pl"/>
    <arg value="${build.dir}/reports/${ant.project.name}.xml"/>
    <arg value="${build.dir}/reports/output"/>
  </exec>
</target>

Por alguna razón, a gtest tampoco le gusta el estilo incorrecto de barras oblicuas que se le pasan desde hormiga, así que hice mi ejecutivo solo para Windows, ya que mi Hudson se está ejecutando en un servidor de Windows. Cambie a '/' para Unix, obviamente.

También presentó un problema para esto en la página de gtest , y también uno en rastreador de problemas de hudson , así que espero que uno de los dos equipos retome el problema, ya que no tengo tiempo suficiente para saltar y hacer un parche yo mismo ... aunque si esto no se soluciona en el futuro cercano, podría solo tienes que hacerlo. ;)

Otros consejos

Así es como lo hago:

    <target name="junit" depends="compile-tests" description="run all unit tests">
      <mkdir dir="${reports}"/>
      <junit haltonfailure="false">
         <jvmarg value="-Xms128m"/>
         <jvmarg value="-Xmx128m"/>
         <classpath>
            <path refid="project.classpath"/>
         </classpath>
         <formatter type="xml"/>
         <batchtest fork="yes" todir="${reports}">
            <fileset dir="${test}/classes">
                <include name="**/*Test*.class"/>
            </fileset>
         </batchtest>
      </junit>
  </target>

  <target name="generate-reports" depends="junit" description="create JUnit test HTML reports">
      <mkdir dir="${reports}"/>
      <junitreport todir="${reports}">
          <fileset dir="${reports}">
              <include name="TEST-*.xml"/>
          </fileset>
          <report format="frames" todir="${reports}"/>
      </junitreport>
  </target>

Estoy casi seguro de que esto no es un problema al analizar el XML, sino más bien un problema para encontrar los archivos XML. Si está utilizando una ruta relativa en la configuración de Hudson, asegúrese de tener claro qué directorio es relativo (parece recordar que no es obvio en ciertas circunstancias).

En cuanto a ejemplos de cómo deben verse los archivos JUnit XML, buena suerte con eso. No se especifica con precisión en ninguna parte. Diferentes herramientas tienen diferentes dialectos. Dicho esto, Hudson hace un buen trabajo al reconocerlos a todos. Creo que fueron los desarrolladores de JUnitReport quienes introdujeron por primera vez el formato XML, por lo que si está utilizando eso, eso es lo más canónico que puede obtener.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top