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