Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义JUnit报告?_Java_Ant_Junit - Fatal编程技术网

Java 自定义JUnit报告?

Java 自定义JUnit报告?,java,ant,junit,Java,Ant,Junit,我正在使用ant任务“junit”和“junitreport”来运行junit测试,并在最后生成一个报告(=>“单元测试结果”) 是否有一些简单的方法来扩展此输出,以获得报告中显示的更多信息?例如,添加包含测试截图链接的附加列 我已经看到可以编写自己的ant junit测试运行程序,如 但这是相当大的努力。是否没有API来访问单元报告的元素?任务使用junit任务生成的XML文件生成报告 您可以通过使用嵌套的report元素的styledir属性指定自己的XSLT来定制输出: <!-- u

我正在使用ant任务“junit”和“junitreport”来运行junit测试,并在最后生成一个报告(=>“单元测试结果”)

是否有一些简单的方法来扩展此输出,以获得报告中显示的更多信息?例如,添加包含测试截图链接的附加列

我已经看到可以编写自己的ant junit测试运行程序,如 但这是相当大的努力。是否没有API来访问单元报告的元素?

任务使用junit任务生成的XML文件生成报告

您可以通过使用嵌套的
report
元素的
styledir
属性指定自己的XSLT来定制输出:

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

对于自定义输出,一个选项是制作并修改输出的副本。或者,您可以寻找一种更易于定制的XSLT替代方案

对于小的更改,只导入默认XSLT并覆盖需要自定义的任何模板可能是最简单的。例如,要为每个测试添加一列,需要覆盖生成表头的模板和生成表行的模板。下面,我刚刚复制了这些模板,并对它们进行了一些修改,添加了一列(查找标有
的两个添加项)


班
名称
地位
类型
时间(s)
截图
错误
失败
表格颜色
失败
错误
成功
结果如下所示:


另外,如果不想替换主xsl文件,可以将xsl文件复制到项目根文件夹中,用更改进行更新,最后编辑build.xml文件,添加styledir属性:

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

朱卡的《了不起的ans》。这是Jukka关于如何准确链接屏幕截图的答案的扩展

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

这里不是Jukka的ans中的上述片段,而是如何链接屏幕截图:

    <!-- 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>

生成junit报告后,您需要做的就是从junit_报告目录下的“selenium/screenshots/”目录复制所有屏幕截图


以上代码将仅为失败的测试添加链接。如果您想要它的所有,然后修改相应的代码

你想要什么样的屏幕截图?你不只是想要错误的堆栈跟踪,你正在寻找控制台,或者它是一个图形表示?嗨,我不想知道如何获得屏幕截图。我已经做到了。我需要知道的是如何扩展JUnit报告,这样我就可以包含一个指向我的屏幕截图的链接。谢谢。最新jUnit版本没有什么新内容吗?嗨,我不想对我的报告应用不同的样式。我需要通过附加(自定义)信息扩展报告。因此,我必须能够以某种方式修改报告的数据,而不是其样式。谢谢。junitreport任务生成的报告的源数据来自junit任务生成的XML文件。然而,根据这些数据,你可以在报告中添加一些额外的信息例如,如果单元测试在某个已知位置生成屏幕截图,其名称可以从单元测试名称派生,则可以通过自定义报告样式来创建指向它们的链接,如上面的示例所示。(我编辑了答案,添加了最终结果的屏幕截图。)谢谢你的建议!这是一个很好的开始。只是每个测试方法我不仅有一个屏幕截图,还有几个屏幕截图,这取决于测试的内容。因此,屏幕截图被编号和命名,例如TestClass-testMethod-01.png。XSLT是否有办法“统计”文件系统上“属于”测试方法的屏幕截图数量?如果不使用扩展名,从XSLT访问文件系统是不可行的。可以从XSLT1访问的唯一格式是(毫不奇怪)XML。现在我想到了三个选项,从需要最少编程的选项到需要最多编程的选项:。。。。。。(1) 每个测试都将屏幕截图放在单独的目录中。然后,不要直接链接到屏幕截图,而是链接到目录。
    <!-- 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>