如何为Junit结果生成HTML报告?

62

有没有一种(简单)的方法可以生成包含测试结果的HTML报告? 我目前正在使用JUnit以及Selenium来测试Web应用程序UI。

PS:由于项目结构的限制,我不能使用Ant :(


你目前正在使用什么(构建)技术?如果你不提供任何提示,那就有太多答案了! - oberlies
1
我遇到的最简单的是一个名为 junit-viewer 的 Node.js 模块,网址为 https://www.npmjs.com/package/ecolutis-junit-viewer。 - Franz Sittampalam
8个回答

44

我发现上述答案非常有用,但不是真正的通用目的,它们都需要一些其他主要的构建系统,如Ant或Maven。

我想生成一个简单的一次性命令报告,可以从任何地方调用(从构建、测试或只是我自己),所以我创建了junit2html,可以在这里找到:https://github.com/inorton/junit2html

您可以通过执行以下操作安装它:

pip install junit2html

2
非常感谢,我一直在寻找这样一个简单的工具!由于答案没有显示使用示例:安装后只需调用 junit2html results.xml output.html - luator
1
这听起来很不错,但我的junit xml测试结果分布在许多单独的.xml文件中。使用junit2html的人是否知道它是否支持像RPM下面显示的ant示例那样的多个.xml文件?如果不支持,您如何处理多个.xml测试结果文件(> 100)? - AdamE
2
在进一步尝试后,我回答了自己的问题:通过传递目录名称(而不是文件名)将多个 .xml 文件合并为单个 .xml 文件 junit2html test-results --merge test-results\reports.xml,然后将单个 .xml 文件转换为 .html 文件 junit2html test-results\reports.xml test-results\reports.html。这里的示例使用的是 Windows 路径语法。 - AdamE
或者,为了获得总体摘要,请使用“junit2html test-results\reports.xml --report-matrix test-results\matrix.html”生成报告,以更易于阅读的方式汇总多个测试的结果。干得好,伙计们。 - AdamE

18

对于使用Maven构建工具的人来说,有一个名为Surefire Report的插件可供使用。

报告看起来像这样:示例


16
如果你会使用 Ant,那么你可以按照这里详细介绍的方法使用 JUnitReport 任务:http://ant.apache.org/manual/Tasks/junitreport.html,但是你在问题中提到你不应该使用 Ant。我认为该任务仅将 XML 报告转换为 HTML,因此可以使用任何 XSLT 处理器生成类似的报告。
另外,你可以切换到使用 TestNG(http://testng.org/doc/index.html),它与 JUnit 非常相似,但具有默认的 HTML 报告以及其他一些很酷的功能。

5
谢谢你的回答!我将尝试说服员工,让他们明白我们需要使用ANT,而以IDE为中心的项目理念是不好的。 - Andrei Ciobanu

12

你可以很容易地通过ant完成这个操作。以下是一个build.xml文件,用于执行此操作。

 <project name="genTestReport" default="gen" basedir=".">
        <description>
                Generate the HTML report from JUnit XML files
        </description>

        <target name="gen">
                <property name="genReportDir" location="${basedir}/unitTestReports"/>
                <delete dir="${genReportDir}"/>
                <mkdir dir="${genReportDir}"/>
                <junitreport todir="${basedir}/unitTestReports">
                        <fileset dir="${basedir}">
                                <include name="**/TEST-*.xml"/>
                        </fileset>
                        <report format="frames" todir="${genReportDir}/html"/>
                </junitreport>
        </target>
</project>

这将查找格式为 TEST-*.xml 的文件,并生成报告到名为 unitTestReports 的文件夹中。

要运行此命令(假设上面的文件名为 buildTestReports.xml),请在终端中运行以下命令:

ant -buildfile buildTestReports.xml

1
那个可行,谢谢!我只希望能按“时间”列对结果表进行排序。 - dzajic
我尝试使用这个工具来收集Newman JUnit报告,但是它没有起作用,出现了Git错误 - 不是有效的测试套件XML文档。你遇到过这种情况吗? - Pankaj Kumar Katiyar

9

junit-viewer不支持在结果路径中使用占位符。 - Damien
1
这个不起作用,在运行 junit-viewer 时会在终端上显示 HTML,但不会将其保存在任何地方。 - Pankaj Kumar Katiyar
在 junit-viewer 参数中添加 --minify-false 可以避免一些失败。 - Valentin Kantor

5

我发现xunit-viewer,它已经废弃了由@daniel-kristof-kiss提到的junit-viewer

这个工具非常简单,可以自动递归收集所有ANT JUnit XML格式的相关文件,并创建一个单独的HTML文件,具有过滤和其他优秀功能。

我使用它上传Travis构建的测试结果,因为Travis没有其他支持来收集标准格式的测试结果输出。


4
有多个选项可用于为Selenium WebDriver脚本生成HTML报告。
1.使用JUNIT TestWatcher类创建自己的Selenium HTML报告
TestWatcher JUNIT类允许覆盖failed()和succeeded()JUNIT方法,在JUNIT测试失败或通过时自动调用。
TestWatcher JUNIT类允许覆盖以下方法:
- 受保护的void failed(Throwable e, Description description)
当测试失败时,会调用failed()方法。
- 受保护的void finished(Description description)
当测试方法完成(无论是否通过)时,会调用finished()方法。
- 受保护的void skipped(AssumptionViolatedException e, Description description)
因失败的假设而导致测试跳过时,会调用skipped()方法。
- 受保护的void starting(Description description)
当测试即将开始时,会调用starting()方法。
- 受保护的void succeeded(Description description)
当测试成功时,会调用succeeded()方法。
请参见下面的示例代码:
import static org.junit.Assert.assertTrue;
import org.junit.Test;

public class TestClass2 extends WatchManClassConsole {

    @Test public void testScript1() {
        assertTrue(1 < 2); >
    }

    @Test public void testScript2() {
        assertTrue(1 > 2);
    }

    @Test public void testScript3() {
        assertTrue(1 < 2);
    }

    @Test public void testScript4() {
        assertTrue(1 > 2);
    }
}

import org.junit.Rule; 
import org.junit.rules.TestRule; 
import org.junit.rules.TestWatcher; 
import org.junit.runner.Description; 
import org.junit.runners.model.Statement; 

public class WatchManClassConsole {

    @Rule public TestRule watchman = new TestWatcher() { 

        @Override public Statement apply(Statement base, Description description) { 
            return super.apply(base, description); 
        } 

        @Override protected void succeeded(Description description) { 
            System.out.println(description.getDisplayName() + " " + "success!"); 
        } 

        @Override protected void failed(Throwable e, Description description) { 
            System.out.println(description.getDisplayName() + " " + e.getClass().getSimpleName()); 
        }
    }; 
}

2. Use the Allure Reporting framework

Allure framework can help with generating HTML reports for your Selenium WebDriver projects.

The reporting framework is very flexible and it works with many programming languages and unit testing frameworks.

You can read everything about it at http://allure.qatools.ru/.

You will need the following dependencies and plugins to be added to your pom.xml file

  1. maven surefire
  2. aspectjweaver
  3. allure adapter

See more details including code samples on this article: http://test-able.blogspot.com/2015/10/create-selenium-html-reports-with-allure-framework.html


1
我创建了一个可以在浏览器中直接运行的JUnit解析器/查看器。它支持转换为JSON格式,HTML报告易于重复使用。
如果你还需要其他功能,请随时在Github上创建一个问题 :)。 https://lotterfriends.github.io/online-junit-parser/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接