问题描述

有没有办法 (轻松) 生成包含测试结果的 HTML 报告?我目前正在使用 JUnit,除了 Selenium 用于测试网络应用程序 UI 。

PS:鉴于项目结构我不应该使用 Ant 🙁

最佳解决方法

如果您可以使用 Ant,那么您只需使用 JUnitReport 任务,详细说明如下:http://ant.apache.org/manual/Tasks/junitreport.html,但您在问题中提到您不应该使用 Ant 。我相信该任务只是将 XML 报告转换为 HTML,因此使用任何 XSLT 处理器生成类似的报告是可行的。

或者,您可以切换到使用与 JUnit 非常相似的 TestNG(http://testng.org/doc/index.html),但是具有默认的 HTML 报告以及其他几个很酷的功能。

次佳解决方法

或者对于使用 Maven 构建工具的用户,还有一个名为 Surefire Report 的插件。

报告如下所示:Sample

第三种解决方法

你可以很容易地通过蚂蚁做这个。这是一个 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

第四种方法

有多个选项可用于生成 Selenium WebDriver 脚本的 HTML 报告。

1. 使用 JUNIT TestWatcher 类创建您自己的 Selenium HTML 报告

TestWatcher JUNIT 类允许覆盖当 JUNIT 测试失败或通过时自动调用的 failed() 和 succeeded() JUNIT 方法。

TestWatcher JUNIT 类允许覆盖以下方法:

  • protected void failed(Throwable e,Description description)

在测试失败时调用 fail() 方法

  • 受保护的空白完成 (描述描述)

在测试方法完成 (无论是否通过) 时调用 finished() 方法

  • protected void skipped(AssumptionViolatedException e,描述描述)

由于失败的假设跳过测试时,会调用 skipped() 方法。

  • protected void starting(描述描述)

在测试即将开始时调用 starts() 方法

  • protected void succeeded(描述描述)

successed() 方法在测试成功时被调用

有关此案例,请参阅以下示例代码:

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. 使用 Allure 报告框架

Allure 框架可以帮助您为 Selenium WebDriver 项目生成 HTML 报告。

报告框架非常灵活,可以与许多编程语言和单元测试框架一起使用。

您可以在 http://allure.qatools.ru/上阅读有关它的所有内容。

您将需要将以下依赖项和插件添加到您的 pom.xml 文件中

  1. maven surefire

  2. aspectjweaver

  3. 诱惑适配器

查看更多详细信息,包括本文的代码示例:http://test-able.blogspot.com/2015/10/create-selenium-html-reports-with-allure-framework.html

第五种方法

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

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

您可以通过以下方式进行安装:

pip install junit2html

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。