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