【问题标题】:How to create an HTML report for JUnit 5 tests?如何为 JUnit 5 测试创建 HTML 报告?
【发布时间】:2017-01-19 13:43:59
【问题描述】:

当通过 Gradle 启动 JUnit 测试时,是否已经可以生成 HTML 报告?任何提示或评论表示赞赏。

【问题讨论】:

    标签: gradle junit junit5


    【解决方案1】:

    更新

    Gradle 4.6 提供了 built-in support for the JUnit Platform,它允许您使用标准 Gradle test 任务运行 JUnit Jupiter 测试,该任务可生成开箱即用的 HTML 报告。


    4.6 之前的 Gradle 版本的答案

    JUnit Platform Gradle 插件生成 JUnit 4 风格的 XML 测试报告。

    这些 XML 文件默认输出到build/test-results/junit-platform

    因此,如果您的构建服务器知道如何解析 JUnit 4 样式的 XML 报告,您只需将其指向该目录中的 XML 文件,然后让构建服务器为您生成 HTML 报告。

    但是,如果您询问 Gradle 是否可以为您通过 junitPlatformTest 任务运行的测试生成 HTML 报告,那么答案是“不,很遗憾不能”。原因是标准的 Gradle test 任务仅根据自己专有的“二进制”报告格式生成 HTML 报告。由于junitPlatformTest 任务不会生成 Gradle 二进制格式的报告,因此 Gradle 本身无法为 JUnit Platform 测试生成 HTML 报告。

    话虽如此,但实际上有一个变通方法:您可以在 Gradle 构建中使用 Ant。 Ant 的任务是聚合基于 JUnit 4 的 XML 报告并从这些聚合报告生成 HTML 报告。输出不是很现代,但至少是人类可读的。缺点是默认的 XSLT 样式表不显示通过 JUnit 平台运行的测试的测试类名称。

    无论如何,您可以在 Gradle 中配置 Ant 的 JUnitReport 任务,如下所示。

    junitPlatform {
        // configure as normal
    }
    
    configurations {
        junitXmlToHtml
    }
    
    task generateHtmlTestReports << {
        def reportsDir = new File(buildDir, 'test-reports')
        reportsDir.mkdirs()
    
        ant.taskdef(
            name: 'junitReport',
            classname: 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator',
            classpath: configurations.junitXmlToHtml.asPath
        )
    
        ant.junitReport(todir: "$buildDir/test-results/junit-platform", tofile: "aggregated-test-results.xml") {
            fileset(dir: "$buildDir/test-results/junit-platform")
            report(format: 'frames', todir: reportsDir)
        }
    }
    
    afterEvaluate {
        def junitPlatformTestTask = tasks.getByName('junitPlatformTest')
        generateHtmlTestReports.dependsOn(junitPlatformTestTask)
        check.dependsOn(generateHtmlTestReports)
    }
    
    dependencies {
        // configure as normal ...
    
        junitXmlToHtml 'org.apache.ant:ant-junit:1.9.7'
    }
    

    然后,执行gradle check 将在build/test-reports/index.html 中生成一个HTML 报告。

    问候,

    Sam(核心 JUnit 5 提交者

    【讨论】:

    • 那么,如果我理解正确的话,这是由于JUnit4和JUnit5之间的变化,对吧?
    • 是的。 JUnit Platform(“JUnit 5”的一部分)提供了比 JUnit 4 更多的报告信息,因此不会映射到 Gradle 中的内置测试基础架构(基于 JUnit 4)。
    • 您可以观看以下问题,了解 Gradle 团队对官方 JUnit 平台支持的更新:github.com/gradle/gradle/issues/828
    • 值得注意的是,这个 sn-p 不会为失败的测试生成报告。为此,您需要运行 ./gradlew --continue check generateHtmlTestReports 或类似的
    • 重要的是,如果您在 4.6 之前启用了 junit 5 附带的 junit 5 gradle 插件,则需要为此删除配置。我花了一段时间才弄清楚。我们应用了 org.junit.platform:junit-platform-gradle-plugin:1.0.1。自 4.6 起不再需要
    【解决方案2】:

    在我的target/test-result 文件夹中创建TEST-junit-jupiter.xml 的java 命令中添加以下行。此 xml 文件包含有关运行的测试用例数量、通过/失败的测试数量等的所有信息

     --reports-dir target/test-result
    

    【讨论】:

      【解决方案3】:

      是的,你可以使用 Jacoco 插件。

      这是一个例子:

      apply plugin: 'war' or apply plugin: 'java'
      apply plugin: "jacoco"
      
      test {
          reports.junitXml.destination="build/test-results"
          jacoco {
              destinationFile = file("build/jacoco/jacoco.exec")
              append=true
          }
      }
      
      jacocoTestReport {
          reports {
              xml.enabled false
              csv.enabled false
              html.destination "${buildDir}/jacocoHtml"
          }
      }
      

      问候。

      【讨论】:

      • Jacoco 创建覆盖率报告,不同于测试成功报告!
      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 2018-09-30
      • 1970-01-01
      • 2017-08-26
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      相关资源
      最近更新 更多