Получение покрытия кода моего приложения с помощью Java-агента JaCoCo на Tomcat - PullRequest
10 голосов
/ 28 июля 2011

Я хочу измерить охват кода интеграционных тестов с помощью инструментов JaCoCo и Sonar.

Для этого я запускаю свой Tomcat 5.5, настроенный с агентом JaCoCo, чтобы получитьфайл дампа из JaCoCo.

Таким образом, я установил 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.*

Когда я запускаю Tomcat, файл C:\dev\servers\jacoco.exec генерируется, но данные не заполняются.

Что-то я забыл в конфигурации моего сервера?

С уважением.

Ответы [ 3 ]

10 голосов
/ 20 ноября 2013

Я понимаю, что, возможно, это не было вариантом 2 года назад, когда был задан этот вопрос, но в настоящее время у вас есть некоторые другие варианты, доступные для извлечения данных выполнения JaCoCo без выключения Tomcat (или любой JVM, оснащенной Java-агентом JaCoCo).

Сначала взгляните на текущую документацию для агента Java JaCoCo: http://www.eclemma.org/jacoco/trunk/doc/agent.html

Вы можете использовать опцию output = tcpserver в агенте JaCoCo, чтобы иметьJava-агент прослушивает команды.Вы можете установить address = *, чтобы tcpserver прослушивал все интерфейсы, и вы можете установить аргумент port = 6300 , чтобы выбрать порт, который должен прослушивать tcpserver.

Через tcpserver java-агент JaCoCo может быть проинструктирован отправлять вам данные всякий раз, когда вы их запрашиваете.

Если ваша JVM в настоящее время предоставляет JMX, у вас есть другая опция, которую вы можете использовать, не открывая дополнительные порты.Установив параметр jmx = true , java-агент JaCoCo предоставляет MBean, с которым вы можете взаимодействовать.

Если вы используете maven, вы можете взглянуть на плагин, который я недавно написал, по порядку.собирать данные JaCoCo с удаленных JVM во время работы.Проект для плагина находится по адресу:
https://github.com/mattcj/jacocotogo

7 голосов
/ 02 октября 2011

Насколько я помню - файл будет заполняться при выключении Tomcat.

3 голосов
/ 13 ноября 2018

Помимо решения maven, вы также можете рассмотреть https://www.eclemma.org/jacoco/trunk/doc/cli.html

По сути, вы запускаете службу на удаленной машине с опцией javaagent, например (вы можете изменить номер порта и опустить включения, если хотитеохват всех классов):

-javaagent:/tmp/jacocoagent.jar=port=36320,destfile=jacoco-it.exec,output=tcpserver,includes=a.b.c.d.*”

Затем подключитесь к удаленному компьютеру, указав адрес удаленного хоста, или откройте туннель для удаленного компьютера.В следующем примере предполагается, что я настроил переадресацию портов между локальным узлом 36320 и удаленным узлом 36320

java -jar jacococli.jar dump --port 36320 --destfile /tmp/jacoco-it.exec

Если у вас несколько файлов .exec, их необходимо объединить:

java -jar jacococli.jar merge /tmp/jacoco-it-1.exec /tmp/jacoco-it-2.exec --destfile /tmp/merge

Затем сгенерируйте отчет html (path1 может быть путем к файлу jar или папке с файлами классов)

java -jar jacococli.jar report /tmp/jacoco-it.exec --classfiles path1 --sourcefiles path2 --html /tmp/report

...