2008-08-06 19 views
12

Estoy compilando un proyecto NAnt en Linux con el servidor de Integración Continua TeamCity. He podido generar un informe de prueba ejecutando NAnt en mono a través de un Corredor de Línea de Comando pero no tengo las opciones de usar el informe como un Corredor NAnt. También estoy usando MBUnit para el marco de prueba.Usando MBUnit en TeamCity

¿Cómo puedo combinar en el informe de prueba y mostrar "Pruebas fallidas: 1 (1 nueva), aprobada: 3049" para la compilación?

Actualización: echar un vistazo a su MBUnitTask una tarea de NAnt que utiliza los mensajes que envía TeamCity espera de NUnit lo que le permite utilizar todas las funciones de TeamCity para las pruebas.

MBUnitTask

Actualización: Galio tiene un mejor soporte por lo que sólo tiene que hacer referencia a las Galio MbUnit 3.5 dlls en lugar de los 3,5 MbUnit DLL y cambiar al corredor de galio para hacer que funcione.

Respuesta

4

TeamCity observa la salida de línea de comando desde la compilación. Puede dejarle saber cómo van sus pruebas insertando ciertos marcadores en esa salida. Vea http://www.jetbrains.net/confluence/display/TCD3/Build+Script+Interaction+with+TeamCity. Por ejemplo

##teamcity[testSuiteStarted name='Test1'] 

le permitirá TeamCity saber que un conjunto de pruebas comenzó. Con MbUnit no puede generar estos marcadores mientras se ejecutan las pruebas, pero puede transformar el archivo XML que genera. Aquí está el XSL que estoy usando:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 

     <xsl:apply-templates/> 

    </xsl:template> 

    <xsl:template match="assemblies/assembly"> 
##teamcity[testSuiteStarted name='<xsl:value-of select="@name" />'] 

     <xsl:apply-templates select="//run" /> 

##teamcity[testSuiteFinished name='<xsl:value-of select="@name" />'] 
    </xsl:template> 

    <xsl:template match="run"> 

     <xsl:choose> 
      <xsl:when test="@result='ignore' or @result='skip'"> 
     ##teamcity[testIgnored name='<xsl:value-of select="@name" />' message='Test Ignored'] 
      </xsl:when> 
      <xsl:otherwise> 
     ##teamcity[testStarted name='<xsl:value-of select="@name" />'] 
      </xsl:otherwise> 
     </xsl:choose> 


     <xsl:if test="@result='failure'"> 
      ##teamcity[testFailed name='<xsl:value-of select="@name" />' message='<xsl:value-of select="child::node()/message"/>' details='<xsl:value-of select="normalize-space(child::node()/stack-trace)"/>'] 
     </xsl:if> 


     <xsl:if test="@result!='ignore' and @result!='skip'"> 
     ##teamcity[testFinished name='<xsl:value-of select="@name" />'] 
     </xsl:if> 

    </xsl:template> 

</xsl:stylesheet> 
3

Esto es lo que ocurrió con

Cómo puedo combinar en el informe de la prueba?

Primero tendrá que obtener mbunit para generar un informe XML y HTML. Los argumentos de línea de comandos se ven así

/rt:Xml /rt:Html /rnf:mbunit /rf:..\reports 

esto generará los informes en una llamada dir informes y el archivo será llamado mbunit.xml y mbunit.html

próxima queremos añadir estos archivos como artefactos en la acumulación

build\reports\* => Reports 

el último paso es decirle TeamCity para agregarlo como una ficha para la acumulación

encontrar el .BuildServer \ config \ main-config.xm l y añadir esta línea (en Windows es en C: \ Documents and Settings \, en Linux fue en el directorio/root)

<report-tab title="Tests" basePath="Reports" startPage="mbunit.html" /> 

¿Cómo puedo mostrar "pruebas fallidas: 1 (1 nuevo), aprobado: 3049 "para la construcción?

TeamCity busca un archivo llamado teamcity-info.xml donde puede pegar los mensajes para que se muestren. El recuento de prueba real es en realidad solo texto sin formato. Creo que puedes agregar el archivo como un artefacto pero también lo tengo en el directorio raíz de la compilación.

en Nant querrá utilizar este comando para hacer un XSLT en el Informe MbUnit XML

<style style="includes\teamcity-info.xsl" in="reports\mbunit.xml" out="..\teamcity-info.xml" /> 

el XSL real se parece a esto. (Nota: que el {y} están reservados en XSL así que tenemos que utilizar params)

<?xml version="1.0" encoding="ISO-8859-1"?> 

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:param name="cbl" select="'{'"/> 
<xsl:param name="cbr" select="'}'"/> 
<xsl:template match="/"> 
<xsl:for-each select="report-result/counter"> 

<build number="1.0.{concat($cbl,'build.number',$cbr)}"> 
    <xsl:if test="@failure-count &gt; 0"> 
     <statusInfo status="FAILURE">  
      <text action="append"> Tests failed: <xsl:value-of select="@failure-count"/>, passed: <xsl:value-of select="@success-count"/></text> 
     </statusInfo> 
    </xsl:if> 
    <xsl:if test="@failure-count = 0"> 
     <statusInfo status="SUCCESS"> 
      <text action="append"> Tests passed: <xsl:value-of select="@success-count"/></text> 
     </statusInfo> 
    </xsl:if> 

</build> 
</xsl:for-each> 

</xsl:template> 
</xsl:stylesheet> 

esto le dará un archivo que tiene este aspecto

<build number="1.0.{build.number}"> 
    <statusInfo status="FAILURE"> 
     <text action="append">Tests failed: 16, passed: 88</text> 
    </statusInfo> 
</build>