2009-02-05 24 views
15

Estamos considerando cambiar de phpundercontrol a Hudson (¡parece tener algunas características realmente geniales!), Pero no puedo entender cómo mostrar los registros de phpunit.¿Cómo podría integrar phpunit con Hudson CI?

Tengo phpunit corriendo bien en Hudson con ant, y --log-xml está poniendo un phpunit.xml en la compilación/carpeta apropiada para esa compilación. Pero no puedo encontrar la manera de mostrar eso para la construcción, para que podamos ver las pruebas que se ejecutaron y las que fallaron, si es que hubo alguna.

Después de darse cuenta de eso, conseguir cobertura, métricas, y api será el próximo :)

Parece que debería ser trivial para cualquier cosa que genera su en HTML, para contar Hudson, por ejemplo, "Para este proyecto mostrar un enlace a 'API' para cada compilación y enlace a compilaciones/$ BUILDNUM/api/index.html ".

+1

FYI ... el indicador --log-xml está en desuso. Use --log-junit en su lugar. – fitzgeraldsteele

Respuesta

24

Instalé el plugin xUnit, lo apunté a mi archivo de registro (desde la configuración del trabajo) y funciona como un amuleto. Parece que ya no es necesario ningún hack personalizado.

http://wiki.hudson-ci.org/display/HUDSON/xUnit+Plugin

+0

Gracias, ahora que este plugin existe, es la solución adecuada, ya que maneja la transformación por usted. – mrooney

4

Normalmente trabajo con CruiseControl para pruebas de PHP (usando el soporte de CC Phing, no phpundercontrol). Solo he trabajado un poco con Hudson, pero he conseguido que Hudson grabe exitosamente las pruebas de phpunit usando el soporte phpunit de phing.

Las siguientes instrucciones asumen que usará Phing (no Ant) para administrar sus compilaciones de proyectos de PHP y que tiene los prereqs necesarios instalados. También supone que tienes PHPUnit 3 instalado (aunque PHPUnit 2.x debería funcionar también).

Paso 1: Proyecto de instalación de Phing/PHPUnit

primer lugar usted necesita para asegurarse de que su proyecto es comprobable mediante Phing. Aquí hay una muestra Phing build.xml que ejecuta pruebas unitarias y crea una salida XML compatible con JUnit.

<?xml version="1.0" ?> 
<project name="Test Project" default="test"> 
    <property name="tests.dir" value="." /> 
    <property name="reports.dir" value="${tests.dir}/reports" /> 

    <target name="test" description="Run PHPUnit tests"> 
     <phpunit haltonerror="true" haltonfailure="true" printsummary="true"> 
      <batchtest> 
       <fileset dir="${tests.dir}"> 
        <include name="**/*Test.php" /> 
       </fileset> 
      </batchtest> 
      <formatter type="plain" usefile="false" /> 
      <formatter type="xml" usefile="true" todir="${reports.dir}" outfile="test-results.xml" /> 
     </phpunit> 
    </target> 
</project> 

Paso 2: Configuración de Hudson

  1. instalar el plugin Phing para Hudson. Tenga en cuenta que puede necesitar instalar Phing como un pacakge independiente (lo puse en /opt/phing-2.3.3) y configurar PHING_HOME en la configuración de Hudson para que apunte a ese directorio. También debería poder usar el Phing instalado por PEAR; sin embargo, no lo he probado.
  2. Configure Hudson para construir su proyecto usando Phing.
  3. Configure Hudson para recopilar pruebas JUnit de su proyecto. El nombre de nuestro archivo de resultados será test-results.xml. En el ejemplo anterior, lo configuraría para recopilar archivos de reports/*. Xml.

Paso 3: Build!

Eso debería hacerlo. Intenta construir tu proyecto ahora. Con suerte, recogerá los resultados.

También vea este Phing presentation, o este Phing presentation para más información sobre Phing y (en menor medida) integración de PHPUnit.

¡Buena suerte!

+0

¡Gracias por la respuesta! Tenía la esperanza de hacerlo con hormiga ya que no estaba instalado, pero le daré una oportunidad e informaré. – mrooney

+0

Desafortunadamente esto no está funcionando. Lo tengo trabajando con phing y está produciendo los archivos xml donde espero, aunque el editor JUnit se queja de que "ninguno de los informes de prueba contenía ningún resultado" como lo hacía antes, aunque apunta al nuevo directorio. ¿Algunas ideas? – mrooney

+0

Hmmm ... eso es extraño. Definitivamente, esto funcionó para mí: la última versión de todos los productos involucrados. ¿El archivo XML resultante realmente contiene resultados de pruebas (válidos)? ¿Revisaste dos veces la ruta del directorio? Algunas rutas en Hudson parecen ser relativas a la raíz del espacio de trabajo, algunas a la raíz del proyecto. –

0

La respuesta anterior es válido, pero más simple, sin cambiar su proceso de construcción:

2

El formato del XML emitido por PHPUnit is not (currently) compatible with Hudson porque no es lo mismo que el XML generado por otras herramientas similares. Es por eso que aparece el mensaje "Ninguno de los informes de prueba contenía ningún resultado".

Si no se arregla PHPUnit para generar XML "mejor" o se mejora Hudson para ser más flexible en lo que acepta, la única solución es corregir el XML eliminando el anidamiento de elementos <testuite>. Tengo used sed to alter the PHPUnit XML para que sea aceptable para Hudson:

# Tweak the test result XML to make it acceptable to Hudson. 
lines=`wc -l test-results/results.xml|awk '{print $1}'` 
end=`expr $lines - 1` 
sed -i "$end d;3d" test-results/results.xml 
+0

Gracias Dan. Respondí a tu publicación de blog que no parecía funcionar para mí, creo que porque tengo más de 2 niveles de etiquetas de conjuntos de pruebas anidados. ¿Algún otro consejo? Con suerte, alguien vendrá con un complemento de phunit en algún momento. – mrooney

5

también puede utilizar este archivo XSLT para convertir XML a XML PHPUnit Hudson/JUnit:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <xsl:element name="testsuites"> 
     <xsl:for-each select="//testsuite[@file]"> 
      <xsl:copy-of select="." /> 
     </xsl:for-each> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 
+0

Este trabajó para mí, gracias. – Trey

2

La transformación XSLT desde el post anterior no funciona para mi Después de aplicar esta transformación, la estructura DOM del informe no cambia. Lo he modificado para solucionar el problema. Mi variante es:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:element name="testsuites"> 
     <xsl:for-each select="//testsuite[@file]/testsuite"> 
      <xsl:copy-of select="." /> 
     </xsl:for-each> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

me funciona.

0

Creo que el xslt puede variar dependiendo de la versión de phpunit que se esté usando. Por ejemplo, la hoja de estilo publicada por hoschi funcionó bien para mí, utilizando phpunit versión 3.3.17

Pero es muy posible que phpunit se haya actualizado para emitir un formato diferente en las versiones más nuevas, o sir-vestnik podría estar ejecutando una versión anterior versión.

7

Con la última respuesta es a partir de 2009 y a lot of people migrating from Hudson to Jenkins ahora due to Oracle, considere usando la plantilla de Jenkins para PHP, que ofrece una plantilla gratuita y conveniente para todas sus necesidades de configuración de PHPQATools, como pdepend, phpmd, phpcs y phpunit en una conve plantilla nient.

También existe la IRC channel #jenkins-php on Freenode de apoyo.

Cuestiones relacionadas