[JAVA] Sortie de la couverture JaCoCo vers la console

Si vous utilisez GitLab CI, vous pouvez analyser la couverture de test à partir de la sortie de la console et l'associer à des commits sans avoir à travailler avec des services externes tels que Coveralls (https://coveralls.io/) ou Jenkins ( L'analyse de la couverture de test est utile. Cependant, l'essentiel Gradle JaCoCo Plugin n'a pas la capacité de générer une couverture sur la console.

Ici, nous allons présenter comment générer la couverture de test vers la sortie standard en analysant vous-même le fichier XML de rapport produit par JaCoCo. Pour cette méthode, j'ai fait référence au fichier de construction de SpringFox.

Opération version confirmée

Créer un fichier

Comme ça. Groovy Ce n'est pas un gros problème, donc c'est bâclé.

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("------------------------------")
}

Image de sortie

Lorsque vous exécutez le test, vous pouvez voir que la couverture est sortie vers la console.

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

Supplément

Le rapport XML de JaCoCo a le format suivant, nous recherchons donc l'élément de niveau supérieur counter de ce XML et calculons la couverture à partir des valeurs de manquée et de couvert.

<?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>

Résumé

La fonction de couverture de GitLab CI n'a pas la fonction avancée de suivi de la transition temporelle de la couverture comme d'autres services, mais elle peut être affichée en liant rapidement la couverture au commit, donc dans un premier temps C'est simple et bon.

Cela semble assez niche, mais si quelqu'un veut consolider la couverture avec JaCoCo, essayez-le.

Recommended Posts

Sortie de la couverture JaCoCo vers la console
Comment sortir une chaîne Java sur l'écran de la console
Comment colorer la sortie de la console de code dans Eclipse
Paramètres de sortie vers la console de débogage dans Visual Studio Code
Sortie javaDoc dans un fichier Word
Sortie de l'arborescence XML dans un fichier
Comment exclure la couverture générée automatiquement de Jacoco lors de l'utilisation de Lombok
Entrée dans la console Java
Introduction à la pratique rapide Chapitre 5
Couverture de test de sortie avec Clover + Gradle
Enregistrer la sortie dans un fichier en Java
Activez la sortie du journal vers les fichiers et la console à l'aide de log4j dans Eclipse.