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