L'obtention de la couverture de code de mon application en utilisant JaCoCo Java agent sur Tomcat
Je veux mesurer la couverture de code de tests d'intégration à l'aide de la JaCoCo et Sonar outils.
Pour cela, j'ai commencer mon Tomcat 5.5 configuré avec le JaCoCo de l'agent afin d'obtenir le fichier de vidage de JaCoCo.
Donc, j'ai mis le JAVA_OPTS
:
set JAVA_OPTS=-Xrs -XX:MaxPermSize=256m -XX:PermSize=256m -XX:NewRatio=3 -Xms512m -Xmx1024m -XX:+UseParallelGC -javaagent:C:\dev\servers\jacoco-agent.jar=destfile=C:\dev\servers\jacoco.exec,append=true,includes=my.application.*
Lorsque je démarre Tomcat, le C:\dev\servers\jacoco.exec
fichier est généré, mais aucune donnée n'est rempli.
Il ya quelque chose que j'ai oublié dans la configuration de mon serveur?
Ce qui concerne.
OriginalL'auteur Romain Linsolas | 2011-07-28
Vous devez vous connecter pour publier un commentaire.
Aussi loin que je me souvienne - fichier sera complété lors de l'arrêt de Tomcat.
Si vous ne voulez pas arrêter votre serveur, comme nous le faisons, Cobertura a un coberturaFlush webapp qui peut être appelée à l'aide de host:port/coberturaFlush/flushCobertura. Assurez-vous d'avoir votre cobertura pot chargé par le même chargeur de classe.
OriginalL'auteur Godin
Je réalise que j'ai peut ne pas avoir été une option il y a 2 ans lorsque cette question a été posée, mais, actuellement, vous avez d'autres options disponible pour aller chercher de l'JaCoCo les données d'exécution sans arrêter Tomcat (ou toute JVM instrumenté avec le JaCoCo java agent).
D'abord prendre un coup d'oeil à la documentation en cours pour la JaCoCo Java Agent: http://www.eclemma.org/jacoco/trunk/doc/agent.html
Vous pouvez utiliser le de sortie=tcpserver option sur la JaCoCo les agents de la Java agent écouter pour les commandes. Vous pouvez définir adresse=* la tcpserver écouter sur toutes les interfaces, et vous pouvez définir le port=6300 argument pour choisir le port où le tcpserver doit écouter.
Par le biais de la tcpserver la JaCoCo java agent peut être configuré pour vous envoyer les données à chaque fois que vous demandez pour elle.
Si votre JVM est actuellement exposer JMX vous avez une autre option que vous pouvez utiliser sans ouvrir de ports supplémentaires. En définissant la jmx=true option la JaCoCo java agent expose un MBean qui vous pouvez interagir avec.
Si vous utilisez maven, vous pouvez prendre un coup d'oeil au plugin je l'ai écrit récemment dans le but de recueillir des JaCoCo des données de distance de la JVM en cours d'exécution. Le projet pour le plugin est situé à:
https://github.com/mattcj/jacocotogo
OriginalL'auteur MattJ
Outre le maven solution, vous pouvez également envisager de https://www.eclemma.org/jacoco/trunk/doc/cli.html
Fondamentalement, vous commencez à votre service sur la machine distante avec le javaagent option comme (vous pouvez changer le numéro de port et d'omettre comprend si vous voulez avoir une couverture pour toutes les classes):
-javaagent:/tmp/jacocoagent.jar=port=36320,destfile=jacoco-it.exec,output=tcpserver,includes=a.b.c.d.*”
Puis se connecter à la machine distante en fournissant de l'hôte distant d'adresse ou d'ouvrir un tunnel à la machine distante. L'exemple suivant suppose que j'ai mis en place une redirection de port entre l'hôte local 36320 et de l'hôte distant, 36320
java -jar jacococli.jar dump --port 36320 --destfile /tmp/jacoco-it.exec
Si vous avez plusieurs .exec fichiers, vous avez besoin de les fusionner:
java -jar jacococli.jar merge /tmp/jacoco-it-1.exec /tmp/jacoco-it-2.exec --destfile /tmp/merge
Puis générer le rapport html (chemin1 peut être un chemin d'accès au fichier jar ou de la catégorie fichiers de dossier)
java -jar jacococli.jar report /tmp/jacoco-it.exec --classfiles path1 --sourcefiles path2 --html /tmp/report
OriginalL'auteur Kaituo Li