java ant junit

java - Informe JUnit personalizado?



ant (3)

Estoy usando las tareas ant ''junit'' y ''junitreport'' para ejecutar mis pruebas JUnit y generar un informe al final (=> "Resultados de la prueba unitaria").

¿Hay alguna manera fácil de extender este resultado de alguna manera para obtener más información en el informe? Por ejemplo, para agregar una columna adicional que contiene un enlace a una captura de pantalla tomada por la prueba.

He visto que uno podría escribir un corredor de prueba de una jonta como el EclipseTestRunner pero esto es bastante esfuerzo. ¿No hay API para acceder a los elementos de un informe de unidad?


Además, si no desea reemplazar el archivo xsl principal, puede copiar el archivo xsl en la carpeta raíz del proyecto, actualizarlo con sus cambios y finalmente editar su archivo build.xml agregando el atributo styledir :

<report styledir="." format="noframes" todir="${junit.output.dir}"/>


Awesome ans por Jukka. Esta es una extensión de la respuesta de Jukka sobre cómo exactamente puedes vincular la captura de pantalla

<!-- ADDED --> <td> <a href="link/to/screenshot/for/test/{@name}">screenshot</a> </td>

En lugar de un fragmento de arriba en los mensajes de Jukka, aquí es cómo puedes vincular las capturas de pantalla:

<!-- Added screenshot link for failed tests --> <td> <xsl:variable name="class.name"> <xsl:value-of select="translate(@classname,''.'',''/'')"/> </xsl:variable> <xsl:variable name="junit.base"> <xsl:call-template name="path"><xsl:with-param name="path" select="../@package"/></xsl:call-template> </xsl:variable> <xsl:choose> <xsl:when test="failure"> <a href="{concat($junit.base,$class.name,''/'',@name,''.png'')}"><xsl:value-of select="@name"/></a> </xsl:when> <xsl:when test="error"> <a href="{concat($junit.base,$class.name,''/'',@name,''.png'')}"><xsl:value-of select="@name"/></a> </xsl:when> </xsl:choose> </td>

Todo lo que necesita hacer después de generar el informe final es copiar todas las capturas de pantalla del directorio "selenium / screenshots /" justo debajo del directorio junit_report.

El código anterior agregará un enlace solo para las pruebas fallidas. Si lo quiere para todos, modifique el código en consecuencia.


La tarea junitreport usa XSLT para generar el informe a partir de los archivos XML generados por la tarea junit .

Puede personalizar el resultado especificando su propio XSLT utilizando el atributo styledir del elemento de report anidado:

<!-- use reportstyle/junit-frames.xsl to produce the report --> <report styledir="reportstyle" format="frames" todir="testreport"/>

Para personalizar el resultado, una opción sería hacer una copia del XSLT predeterminado y modificar eso. O podría buscar un XSLT alternativo que sea más fácil de personalizar para sus propósitos.

Para pequeños cambios, puede ser más fácil importar el XSLT predeterminado y anular las plantillas que necesite personalizar. Por ejemplo, para agregar una columna para cada prueba, necesitaría anular la plantilla que produce el encabezado de la tabla y la plantilla que produce una fila de la tabla. A continuación, acabo de copiar esas plantillas y las modifiqué un poco para agregar una columna (busque dos adiciones marcadas con <!-- ADDED --> ).

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- import the default stylesheet --> <xsl:import href="jar:file:lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl"/> <!-- override the template producing the test table header --> <xsl:template name="testcase.test.header"> <xsl:param name="show.class" select="''''"/> <tr valign="top"> <xsl:if test="boolean($show.class)"> <th>Class</th> </xsl:if> <th>Name</th> <th>Status</th> <th width="80%">Type</th> <th nowrap="nowrap">Time(s)</th> <!-- ADDED --> <th>Screenshot</th> </tr> </xsl:template> <!-- override the template producing a test table row --> <xsl:template match="testcase" mode="print.test"> <xsl:param name="show.class" select="''''"/> <tr valign="top"> <xsl:attribute name="class"> <xsl:choose> <xsl:when test="error">Error</xsl:when> <xsl:when test="failure">Failure</xsl:when> <xsl:otherwise>TableRowColor</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:variable name="class.href"> <xsl:value-of select="concat(translate(../@package,''.'',''/''), ''/'', ../@id, ''_'', ../@name, ''.html'')"/> </xsl:variable> <xsl:if test="boolean($show.class)"> <td><a href="{$class.href}"><xsl:value-of select="../@name"/></a></td> </xsl:if> <td> <a name="{@name}"/> <xsl:choose> <xsl:when test="boolean($show.class)"> <a href="{concat($class.href, ''#'', @name)}"><xsl:value-of select="@name"/></a> </xsl:when> <xsl:otherwise> <xsl:value-of select="@name"/> </xsl:otherwise> </xsl:choose> </td> <xsl:choose> <xsl:when test="failure"> <td>Failure</td> <td><xsl:apply-templates select="failure"/></td> </xsl:when> <xsl:when test="error"> <td>Error</td> <td><xsl:apply-templates select="error"/></td> </xsl:when> <xsl:otherwise> <td>Success</td> <td></td> </xsl:otherwise> </xsl:choose> <td> <xsl:call-template name="display-time"> <xsl:with-param name="value" select="@time"/> </xsl:call-template> </td> <!-- ADDED --> <td> <a href="link/to/screenshot/for/test/{@name}">screenshot</a> </td> </tr> </xsl:template> </xsl:stylesheet>

Así es como se ve el resultado: