Gradle Jacoco Code Coverage - Dann veröffentlichen / zeigen in Jenkins

Ich versuche, die Codeabdeckung für ein Java-Anwendungsprojekt einzurichten.

Projektname: NewApp

Projektstruktur:

src / java / ** (Quellcode)src / java-test (unit tests - Jnuit)Test / It-Test (Integrationstest)Test / at-Tests (Abnahmetests)tomcat / * (enthält Tomcat-Start / Stopp-Skripte)xx / .. etc Ordner, die für eine normale Anwendung benötigt werden.

Gradle-Version: 1.6

Umgebung: Linux

Ich habe ein laufendes Gradle-Build-Skript, das Anwendungsabhängigkeiten (NewApp) (d. H. Service-Jars, die von der App für den Build-Prozess verwendet werden) aus einem Build-Artefakt-Repository (Artifactory / Maven, zum Beispiel) abruft und die App erstellt.

Jetzt wollte ich mit dem JaCoCo-Plugin eine Codeabdeckung für mein NewApp-Anwendungsprojekt erhalten.

Ich habe die Dokumentation von Gradle / Jacoco befolgt, aber es scheint keinen Bericht / ... -Ordner für Jacoco usw. zu erstellen, in dem ich finden kann, was Jacoco-Berichterstattung getan hat.

Meine Fragen: 1. Um Codeabdeckung mit Unit-Tests (Junit) zu erhalten, gehe ich davon aus, dass ich nur Folgendes tun muss, und dass ich den Tomcat NICHT starten / stoppen muss, bevor ich Unit-Tests ausführen kann (Testaufgabe, z. B. "Gradle-Test"). ), um Codeabdeckung für / über Unit-Tests zu erhalten. Bitte beraten / korrigieren. Der Code (nur für Gradle Jacoco Unit Test Part) - ich benutze:

apply plugin: 'jacoco'

test {
      include 'src/java-test/**'
}

jacocoTestReport {
    group = "reporting"
    description = "Generate Jacoco coverage reports after running tests."
    reports {
        xml.enabled true
        html.enabled true
        csv.enabled false
    }
    //classDirectories = fileTree(dir: 'build/classes/main', include: 'com/thc/**')
    //sourceDirectories = fileTree(dir: 'scr/java', include: 'com/thc/**')
    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs)
}

und für Integrationstests:

task integrationTest(type: Test) {
        include 'test/java/**'
}

Da jacocoTestReport von den Testaufgaben abhängt, werden diese zuerst aufgerufen, und dann meldet jacocoTestReport, was für die Codeabdeckung festgestellt wurde.

Um Codeabdeckung für Integrationstests zu erhalten, gehe ich davon aus, dass ich tomcat zuerst starten muss (dh bevor ich test target für Integrationstests ausführe / aufrufe), dann die Task "gradle integrationTest" oder "gradle test" aufrufen und dann tomcat stoppen muss, um den Code zu erhalten Berichterstattung. In anderen Blog-Beiträgen habe ich auch festgestellt, dass man die Variable JAVA_OPTS einrichten sollte, um einen jacoco-Agenten zuzuweisen, bevor Tomcat startet.

Zum Beispiel: JAVA_OPTS Variable setzen wie:

export JACOCO="-Xms256m -Xmx512m -XX:MaxPermSize=1024m -javaagent:/production/jenkinsAKS/jobs/NewApp/workspace/jacoco-0.6.3.201306030806/lib/jacocoagent.jar=destfile=/production/jenkinsAKS/jobs/NewApp/workspace/jacoco/jacoco.exec,append=true,includes=*"
export JAVA_OPTS="$JAVA_OPTS $JACOCO"

Gradle / Groovy-Neuling - Ich bin mir nicht sicher, welchen Code ich in build.gradle (Build-Skript) schreiben soll, damit die obigen Integrations- / Unit-Tests funktionieren, wenn es um das Starten / Stoppen von Tomcat geht. Wenn jemand ein Beispielskript dafür bereitstellen kann, werde ich es versuchen.

Ich erhalte derzeit keine Codeabdeckung, wenn ich Jacoco-Codeabdeckung in Jenkins veröffentliche (mithilfe der Jenkins-Postbuild-Aktion zum Veröffentlichen von Jacoco-Berichten). Das Jenkins-Build-Dashboard zeigt 0% für die Codeabdeckung (d. H. Balken zeigen die gesamte rote Farbe, kein Grün für die tatsächliche Codeabdeckung).

Benötigen Sie Ihren Rat, um diesbezüglich eine gewisse Unterstützung zu erhalten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage