Gradle jacoco de couverture de code - Ensuite publier/afficher dans Jenkins
Je suis en train de l'installation de la couverture de code pour un projet d'application Java.
Nom du projet : NewApp
Structure de projet:
- src/java/** (code source)
- src/java-test (tests unitaires - Jnuit)
- test/il-test (test d'intégration)
- test/au-tests (tests d'acceptation)
- tomcat/* (contient tomcat start/stop scripts)
- xx/.. etc dossiers qui sont nécessaires pour une application.
Gradle version : 1.6
Environnement : Linux
J'ai l'exécution d'un script de build gradle qui récupère application (NewApp) dépendances (à savoir le service des pots utilisés par l'application pour le processus de construction) d'un artefact référentiel (artifactory/maven par ex), et la création de l'application.
Maintenant à ce point, je voulais me la couverture de code à l'aide de JaCoCo plugin pour mon NewApp projet d'application.
J'ai suivi la documentation par Gradle/Jacoco mais il ne semble pas à créer des rapports/... dossier pour jacoco etc où je peux trouver ce Jacoco rapport de couverture de fait.
Mes questions:
1. Pour obtenir la couverture de code à l'aide de tests Unitaires (Junit), j'assume tout ce que j'ai à faire est le suivant et il ne sera PAS besoin de moi pour démarrer/arrêter le serveur tomcat avant l'exécution de l'unité de test (test de la tâche, c'est à dire "gradle test") pour obtenir la couverture de code pour/par l'aide de tests unitaires. Merci de vous conseiller et de les corriger. Le code (juste pour Gradle jacoco de test de l'unité de la partie) - j'utilise est:
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)
}
et pour les tests d'Intégration:
task integrationTest(type: Test) {
include 'test/java/**'
}
Comme jacocoTestReport est dépend de la tâche de test(s), donc, ils vont être appelée en premier et puis finalement jacocoTestReport va rapporter ce qu'il a trouvé pour la couverture de code.
- Pour l'obtention de la couverture de code par les tests d'intégration, je suppose que je dois démarrer tomcat première (c'est à dire avant l'exécution /l'appel de la cible de test pour les tests d'intégration), puis d'appeler "gradle integrationTest" ou "gradle test" de la tâche, puis arrêter tomcat -- pour obtenir le rapport de couverture de code. D'autres billets de blog, je trouve aussi que l'on doit l'installation de la variable JAVA_OPTS à attribuer jacoco agent avant de tomcat commence.
ex: réglage de la variable JAVA_OPTS comme:
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"
-
Étant nouveau Gradle/groovy - je ne sais pas quel code dois-je écrire dans un délai de construire.gradle (script) pour obtenir au-dessus de l'Intégration/tests Unitaires de travail si elle implique le démarrage/arrêt de tomcat. Si quelqu'un peut fournir un exemple de script pour le faire, je vais essayer.
-
Je ne suis pas toute la couverture de code à droite maintenant, lorsque je publie Jacoco de couverture de code dans Jenkins (à l'aide de Jenkins post-construction de l'action pour la publication Jacoco rapports). Jenkins construire tableau de bord indique 0% de couverture de code (c'est à dire les barres montrant tous de couleur rouge, ni vert pour réelle de la couverture de code).
Besoin de vos conseils pour avoir une certaine influence sur ce point.
Vous devez vous connecter pour publier un commentaire.
Question : je suppose que les tests unitaires ne dépend pas de tomcat. Dans ce cas, vous avez raison, vous ne devez pas démarrer tomcat à l'avance.
Pour créer le rapport de couverture, vous devez exécuter
sans
jacocoTestReport
gradle ne se déclenche pas jacoco de générer les rapports.Une autre chose, en ce qui concerne votre extrait de code. Je suppose que vous avez modifié la valeur par défaut principal sourceset à
source/java
. dans ce cas, vous n'avez pas à définir laadditionalSourceDirs
.Tests d'intégration : Oui, vous avez besoin pour démarrer tomcat première, ou, au moins, vous devez vous assurer que le serveur tomcat est en cours d'exécution. Vous devriez regarder dans Gradle 1.7. Il a une nouvelle tâche de commande règle appelée
finalizedBy
Avec ce que vous pourriez faire quelque chose comme
start/stopTomcat sont des tâches personnalisées.Si vous devez rester sur Gradle de 1,6 vous avez à construire un
dependsOn
de la chaîne:Je suppose que l'article du blog est de droite, je n'ai pas d'expérience avec ce.
De départ/arrêt en route Tomcat : Vous pourriez le faire dans un sens comme ce
L'arrêt script peut être écrit dans une semblable manière. (Certains de Groovy doc : L'exécution de)
Jenkins & Jacoco : Doit être fixé lors de l'exécution de
jacocoTestReport
Ai eu de travail.
Gradle 1.7
- télécharger le .zip qui contient les fichiers binaires/src et de la documentation.
- Allez dans le dossier: si vous décompressez le ci-dessus .zip à C:\gradle-1.7
C:\gradle-1.7\samples\test\jacoco\démarrage rapide
Exécuter:
gradle construire jacocoTestReport
Vous verrez un nouveau dossier “build” après la construction.
– dossier jacoco est créé avec classdumps et .exec si seulement construire tâche est appelée.
– dossier jacoco et jacocoHtml est créé – si les deux construire jacocoTestReport est appelé
avoir du plaisir.
J'ai aussi vu que c'est pour mieux comprendre:
de l'article suivant dans la construction.gradle