[JAVA] Geben Sie die JaCoCo-Abdeckung an die Konsole aus

Wenn Sie GitLab CI verwenden, können Sie die Testabdeckung aus der Konsolenausgabe analysieren und mit Commits verknüpfen, ohne mit externen Diensten wie Coveralls (https://coveralls.io/) oder Jenkins () arbeiten zu müssen. Test Coverage Parsing ist nützlich. Das wesentliche Gradle JaCoCo Plugin kann jedoch keine Abdeckung an die Konsole ausgeben.

Hier wird erläutert, wie Sie die Testabdeckung in die Standardausgabe ausgeben, indem Sie die von JaCoCo ausgegebene XML-Berichtsdatei selbst analysieren. Für diese Methode habe ich auf die Build-Datei von [SpringFox] verwiesen (https://github.com/springfox/springfox/blob/v1.0.2/gradle/coverage.gradle).

Betrieb bestätigte Version

Datei erstellen

So was. Groovy Es ist keine große Sache, also ist es schlampig.

plugins {
    id 'jacoco'
}

jacocoTestReport {
    reports {
        xml.enabled = true
        html.enabled = true
    }
    doLast {
        def report = file("${jacoco.reportsDir}/test/jacocoTestReport.xml")
        printCoverage(report)
    }
}

test.finalizedBy jacocoTestReport

def printCoverage(File xml) {
    if (!xml.exists()) return

    def parser = new XmlParser()
    parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false)
    parser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false)
    def results = parser.parse(xml)

    def percentage = {
        def covered = it.'@covered' as Double
        def missed = it.'@missed' as Double
        ((covered / (covered + missed)) * 100).round(2)
    }

    def counters = results.counter
    def metrics = [
            'instruction': percentage(counters.find { it.'@type'.equals('INSTRUCTION') }),
            'branch'     : percentage(counters.find { it.'@type'.equals('BRANCH') }),
            'line'       : percentage(counters.find { it.'@type'.equals('LINE') }),
            'complexity' : percentage(counters.find { it.'@type'.equals('COMPLEXITY') }),
            'method'     : percentage(counters.find { it.'@type'.equals('METHOD') }),
            'class'      : percentage(counters.find { it.'@type'.equals('CLASS') })
    ]

    logger.quiet("----- Code Coverage ----------")
    metrics.each { key, value -> logger.quiet(sprintf(" - %-11s: %6.2f%%", key, value)) }
    logger.quiet("------------------------------")
}

Ausgabebild

Wenn Sie den Test ausführen, können Sie sehen, dass die Abdeckung an die Konsole ausgegeben wird.

$ ./gradlew test
...
> Task :jacocoTestReport
----- Code Coverage ----------
 - instruction:  27.32%
 - branch     :   3.50%
 - line       :  91.25%
 - complexity :  34.05%
 - method     :  72.94%
 - class      : 100.00%
------------------------------
...

Ergänzung

JaCoCos Berichts-XML hat das folgende Format, daher suchen wir nach dem "Zähler" -Element der obersten Ebene dieses XML und berechnen die Abdeckung aus den Werten "verpasst" und "abgedeckt".

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.0//EN" "report.dtd">
<report name="example">
    ...
    <counter type="INSTRUCTION" missed="931" covered="350" />
    <counter type="BRANCH" missed="193" covered="7" />
    <counter type="LINE" missed="7" covered="73" />
    <counter type="COMPLEXITY" missed="122" covered="63" />
    <counter type="METHOD" missed="23" covered="62" />
    <counter type="CLASS" missed="0" covered="9" />
</report>

Zusammenfassung

Die Abdeckungsfunktion von GitLab CI verfügt nicht über die erweiterte Funktion, den zeitlichen Übergang der Abdeckung wie bei anderen Diensten zu verfolgen. Sie kann jedoch angezeigt werden, indem die Abdeckung als erster Schritt schnell mit dem Commit verknüpft wird Es ist einfach und gut.

Es klingt ziemlich nisch, aber wenn jemand die Berichterstattung mit JaCoCo trösten möchte, probieren Sie es aus.

Recommended Posts

Geben Sie die JaCoCo-Abdeckung an die Konsole aus
So geben Sie eine Java-Zeichenfolge auf dem Konsolenbildschirm aus
Farbcodierung der Konsolenausgabe in Eclipse
Ausgabeeinstellungen an die Debug-Konsole in Visual Studio Code
JavaDoc in Word-Datei ausgeben
XML-Baum in Datei ausgeben
So schließen Sie automatisch generierte von der Jacoco-Abdeckung aus, wenn Sie Lombok verwenden
Eingabe in die Java-Konsole
Einführung in die schnelle Übungsausgabe Kapitel 5
Ausgabe Testabdeckung mit Klee + Gradle
Protokollausgabe in Datei in Java
Aktivieren Sie die Protokollausgabe sowohl für Dateien als auch für die Konsole mit log4j in Eclipse.