FAQ
Des questions du haut de ma tête depuis que je suis devenu fou de jacoco.
Mon serveur d'application (jBoss, Glassfish ..) situé en Irak, en Syrie, peu importe .. Est-il possible d'obtenir une couverture multi-module lors de l'exécution de tests d'intégration? Jenkins et Sonar sont également sur des serveurs différents.
Oui. Vous devez utiliser l' agent jacoco qui s'exécute en mode output=tcpserver
, jacoco ant lib. Fondamentalement, deux jar
s. Cela vous donnera 99% de succès.
Comment fonctionne l'agent Jacoco?
Vous ajoutez une chaîne
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
sur votre serveur d'applications JAVA_OPTS et redémarrez-le. Dans cette chaîne, il suffit [your_path]
de remplacer le chemin vers jacocoagent.jar, stocké (stockez-le!) Sur votre machine virtuelle où le serveur d'applications s'exécute. Depuis que vous démarrez le serveur d'applications, toutes les applications déployées seront surveillées de manière dynamique et leur activité (c'est-à-dire l'utilisation du code) sera prête pour que vous puissiez obtenir le format jacocos .exec par requête tcl.
Puis-je réinitialiser l'agent jacoco pour commencer à collecter les données d'exécution uniquement depuis le début de mon test?
Oui, pour cela, vous avez besoin du script jacocoant.jar et ant build situé dans votre espace de travail jenkins.
Donc, fondamentalement, ce dont j'ai besoin de http://www.eclemma.org/jacoco/ est jacocoant.jar situé dans mon espace de travail jenkins et jacocoagent.jar situé sur ma VM de serveur d'applications?
C'est vrai.
Je ne veux pas utiliser fourmi, j'ai entendu dire que le plugin jacoco maven peut faire toutes les choses aussi.
Ce n'est pas vrai, le plugin jacoco maven peut collecter des données de test unitaire et des données de tests d'intégration (voir Arquillian Jacoco ), mais si vous avez par exemple des tests rassurés en tant que build séparé dans jenkins, et que vous souhaitez afficher une couverture multi-module, je peux ne voyez pas comment le plugin maven peut vous aider.
Que produit exactement l'agent jacoco?
Uniquement les données de couverture au .exec
format. Sonar peut alors le lire.
Jacoco a-t-il besoin de savoir où se trouvent mes classes Java?
Non, le sonar le fait, mais pas le jacoco. Lorsque vous faites le mvn sonar:sonar
chemin vers les classes entre en jeu.
Alors qu'en est-il du script de fourmi?
Il doit être présenté dans votre espace de travail jenkins. Mine script de fourmi, j'ai appelé ça jacoco.xml
ressemble à ça:
<project name="Jacoco library to collect code coverage remotely" xmlns:jacoco="antlib:org.jacoco.ant">
<property name="jacoco.port" value="6300"/>
<property name="jacocoReportFile" location="${workspace}/it-jacoco.exec"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${workspace}/tools/jacoco/jacocoant.jar"/>
</taskdef>
<target name="jacocoReport">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" dump="true" reset="true" destfile="${jacocoReportFile}" append="false"/>
</target>
<target name="jacocoReset">
<jacoco:dump address="${jacoco.host}" port="${jacoco.port}" reset="true" destfile="${jacocoReportFile}" append="false"/>
<delete file="${jacocoReportFile}"/>
</target>
</project>
Deux paramètres obligatoires que vous devez passer lors de l'appel de ce script,
-Dworkspace=$WORKSPACE
utilisez-le pour pointer vers votre espace de travail jenkins et l' -Djacoco.host=yourappserver.com
hôte sanshttp://
Notez également que j'ai placé mon jacocoant.jar
dans $ {workspace} /tools/jacoco/jacocoant.jar
Que devrais-je faire ensuite?
Avez-vous démarré votre serveur d'applications avec jacocoagent.jar?
Avez-vous mis le script ant et jacocoant.jar dans votre espace de travail jenkins?
Si oui, la dernière étape consiste à configurer une version jenkins. Voici la stratégie:
- Appelez la cible fourmi
jacocoReset
pour réinitialiser toutes les données précédemment collectées.
- Exécutez vos tests
- Invoquer la cible fourmi
jacocoReport
pour obtenir le rapport
Si tout est correct, vous verrez it-jacoco.exec
dans votre espace de travail de construction.
Regardez la capture d'écran, j'ai également ant
installé dans mon espace de travail dans $WORKSPACE/tools/ant
dir, mais vous pouvez en utiliser un qui est installé dans votre jenkins.
Comment pousser ce rapport dans sonar?
Maven sonar:sonar
fera le travail (n'oubliez pas de le configurer), pointez-le vers le pom.xml principal pour qu'il s'exécute à travers tous les modules. Utilisez le sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
paramètre pour indiquer au sondeur où se trouve votre rapport de test d'intégration. Chaque fois qu'il analysera de nouvelles classes de modules, il recherchera des informations sur la couverture dans it-jacoco.exec
.
J'ai déjà jacoco.exec dans mon répertoire `target`,` mvn sonar: sonar` l'ignore / le supprime
Par défaut mvn sonar:sonar
fait clean
et supprime votre répertoire cible, utilisez sonar.dynamicAnalysis=reuseReports
pour l'éviter.