Как создать отчет в формате HTML для тестов JUnit 5?

Есть ли уже возможность генерировать HTML-отчет, когда тесты JUnit запускались через Gradle? Любой намек или комментарий приветствуется.

4 ответа

Решение

ОБНОВИТЬ

Gradle 4.6 предоставляет встроенную поддержку для платформы JUnit, которая позволяет запускать тесты JUnit Jupiter с использованием стандартного Gradle test задача, которая генерирует отчеты HTML из коробки.


Ответ для версий Gradle до 4.6

Плагин Gradle платформы JUnit генерирует отчеты о тестировании XML в стиле JUnit 4.

Эти XML-файлы выводятся на build/test-results/junit-platform по умолчанию.

Итак, если ваш сервер сборки знает, как анализировать XML-отчеты в стиле JUnit 4, вы можете просто указать ему XML-файлы в этом каталоге и позволить серверу сборки сгенерировать HTML-отчет для вас.

Однако, если вы спрашиваете, может ли Gradle сгенерировать отчет HTML для ваших тестов, запущенных через junitPlatformTest задание, то ответ "Нет, к сожалению, нет". Причина в том, что стандартный Gradle test Задача генерирует только отчеты HTML на основе собственного проприетарного "двоичного" формата отчета. Так как junitPlatformTest Задача не генерирует отчеты в двоичном формате Gradle, сам Gradle не может генерировать отчеты HTML для тестов JUnit Platform.

Сказав это, однако, на самом деле есть обходной путь: вы можете использовать Ant в своей сборке Gradle. У Ant есть задача агрегировать XML-отчеты на основе JUnit 4 и генерировать HTML-отчет из этих агрегированных отчетов. Вывод не очень современный, но, по крайней мере, читабельный. Недостатком является то, что таблица стилей XSLT по умолчанию не отображает имена классов тестов для тестов, выполняемых через платформу JUnit.

В любом случае вы можете настроить задачу Ant JUnitReport в Gradle следующим образом.

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 сгенерирует отчет в формате HTML в build/test-reports/index.html,

С Уважением,

Сэм (основной коммитер JUnit 5)

Добавление строки ниже в мою команду Java создан TEST-junit-jupiter.xml в моем target/test-result папка. Этот XML-файл содержит всю информацию о количестве выполненных тестов, количестве пройденных / неудачных тестов и т. Д.

 --reports-dir target/test-result

Отчет о тестировании будет доступен по умолчанию вbuild/reports/tests/<Task Name>/index.html.

Вы можете изменить это в файле build.gradle[.kts] следующим образом:

      reporting.baseDir = file("my-reports")

См. https://docs.gradle.org/current/userguide/java_testing.html#test_reporting .

Да, вы можете использовать плагин 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"
    }
}

С уважением.

Другие вопросы по тегам