Как получить покрытие кода инструментария JaCoCo при выполнении веб-приложения на сервере

Я хочу получить отчет о покрытии кода (или отслеживание потока контроллера приложения), когда я выполняю какой-то сценарий в реальном приложении, то есть когда приложение работает на сервере, поэтому я обратился к официальному документация Jacoco и поступил так же

В качестве первого шага я попытался привязать агент jacoco к работающему порту приложения.

export MAVEN_OPTS=-javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runtime.jar=includes=*,output=tcpserver,port=6300,address=*,dumponexit=true  

затем я запустил сервер и к тому времени выполнил несколько тестовых сценариев. Я также попросил jacoco получить дамп, выполнив следующую команду

 mvn jacoco:dump

когда я выполнил указанную выше команду, сначала она отображалась как java.net.BindException: Address already in use, а затем печаталась как пара

[INFO] Connecting to localhost/127.0.0.1:6300

Когда я остановил сервер, jacoco.exec был создан в известном месте после того, как я запросил создание отчета jacoco, выполнив следующую команду

mvn jacoco:report

Наконец я получил отчет, но когда я открываю страницу index.html, он показывает 0% покрытия.

вы можете воспроизвести мою трудность со следующим примером проекта Spring MVC

загрузите проект Spring MVC с https://github.com/mkyong/spring4-mvc-ajax-example с Github

В моем случае я использую сервер WildFly 8.x для запуска проекта и добавляю следующие зависимости к загруженным проектам pom.xml.

 maven-surefire-plugin of 2.19.1 version
 jacoco-maven-plugin of 0.7.4.201502262128 version 
 junit of 4.12 version

Затем очистите и соберите проект, используя следующие команды.

mvn clean install

как только это будет сделано, получите файл .war из целевой папки проекта и сохраните его в папке wildfly serverwildfly-9.0.0.CR2/standalone/deployments/

После развертывания .war перейдите в папку /wildfly-9.0.0.CR2/bin/ и выполните/запустите файл ./standalone.sh или, в зависимости от платформы, вы можете запустить файл .dat/.sh.

после развертывания проекта и запуска сервера выполните следующую команду

mvn jacoco:dump

он отображался как прослушивание/подключение к localhost/127.0.0.1:6300

Затем выполните несколько тестовых сценариев и выполните следующую команду maven.

mvn jaococ:report

Наконец отчет будет сгенерирован с 0% охватом!.

Загруженный проект можно найти на веб-сайте MKyong< /а>

Пожалуйста, помогите мне получить отчет о покрытии кода, и любая помощь будет оценена по достоинству.


person Rajesh Hatwar    schedule 09.02.2017    source источник


Ответы (1)


JaCoCo требует точно такие же файлы классов для создания отчетов, которые использовались во время выполнения, поэтому

  • если отчет совсем пустой, то классы не были предоставлены
  • если отчет содержит классы, но их покрытие равно 0%, то они не соответствуют классам, которые использовались во время выполнения - это описано вместе с другой связанной информацией в документации JaCoCo на странице http://www.jacoco.org/jacoco/trunk/doc/classids.html

и в любом случае проверьте наличие предупреждений в журнале.

Обновление для обновленного вопроса

Вот что я сделал:

  • скачал и распаковал JaCoCo 0.7.9 в /tmp/jacoco/jacoco-0.7.9
  • скачал и распаковал Wildfly 9.0.0.CR2 в /tmp/jacoco/wildfly-9.0.0.CR2
  • клонировано https://github.com/mkyong/spring4-mvc-ajax-example в /tmp/jacoco/spring4-mvc-ajax-example и построен как mvn verify
  • скопировал /tmp/jacoco/spring4-mvc-ajax-example/spring4-mvc-maven-ajax-example-1.0-SNAPSHOT.war в /tmp/jacoco/wildfly-9.0.0.CR2/standalone/deployments
  • Wildfly стартовал как JAVA_OPTS=-javaagent:/tmp/jacoco/jacoco-0.7.9/lib/jacocoagent.jar=output=tcpserver ./standalone.sh и получил достаточно времени для развертывания приложения
  • в каталоге /tmp/jacoco/spring4-mvc-ajax-example выполнил mvn org.jacoco:jacoco-maven-plugin:0.7.9:dump org.jacoco:jacoco-maven-plugin:0.7.9:report (обратите внимание, что версия используемого агента соответствует версии jacoco-maven-plugin), так что он создал /tmp/jacoco/spring4-mvc-ajax-example/jacoco.exec и сообщил /tmp/jacoco/spring4-mvc-ajax-example/site/jacoco: отчет
  • открыл http://localhost:8080/spring4-mvc-maven-ajax-example-1.0-SNAPSHOT/ и сделал некоторые действия
  • снова выполнил mvn org.jacoco:jacoco-maven-plugin:0.7.9:dump org.jacoco:jacoco-maven-plugin:0.7.9:report, чтобы получить обновленный отчет: обновленный отчет
person Godin    schedule 09.02.2017
comment
спасибо за ответ, я получаю отчет, и он содержит классы, но покрытие кода составляет 0%, не могли бы вы предложить способ сопоставления классов, которые использовались во время выполнения, или, пожалуйста, скажите мне, как я могу получить классы времени выполнения - person Rajesh Hatwar; 09.02.2017
comment
Я думаю, что jacoco должен связываться с JVM/сервером, чтобы получить классы времени выполнения, или, пожалуйста, скажите мне, как я могу отслеживать поток контроллера во время выполнения - person Rajesh Hatwar; 09.02.2017
comment
Файлы классов @RajeshHatwar, которые используются во время выполнения на сервере, должны быть точно такими же, как и при создании отчета буквально. - person Godin; 09.02.2017
comment
Пожалуйста, позвольте мне уточнить этот момент: Dose JACOCO показывает покрытие кода для веб-приложения без каких-либо модульных тестов и выполнения тестовых сценариев вручную в веб-браузере. - person Rajesh Hatwar; 09.02.2017
comment
@RajeshHatwar да - то, как вы выполняете приложение, не имеет значения - person Godin; 09.02.2017
comment
да, в моем приложении мне нужно сделать две вещи! один из них пишет модульные тестовые примеры и получает отчет о покрытии кода, приложение настолько сложное и содержит множество сценариев, что мы не можем написать все сценарии тестовых случаев! но, надеюсь/возможно, при ручном тестировании мы сможем охватить как минимум 90%+ сценариев. поэтому с помощью Jacoco, если мы сможем получить отчет о покрытии при тестировании вручную вместо написания тестовых случаев, это будет полезно, как clover - person Rajesh Hatwar; 09.02.2017
comment
Я запускаю свое приложение в среде eclipse IDE, и, наконец, для всех этапов развертывание будет выполняться на компьютере с Linux. Я хочу сообщить вам одну вещь: я могу получить надлежащий отчет о покрытии кода, когда я выполняю свое приложение вместе с примерами модульного тестирования (написанными в Junit), но не без тестовых примеров. - person Rajesh Hatwar; 09.02.2017
comment
Пожалуйста, помогите мне в этом, я чуть не залаял, чтобы получить отчет! как вы упомянули во втором пункте, я могу получить отчет, но охват 0%, поэтому jacoco не получил классы, которые использовались во время выполнения. Но в интегрированной среде, такой как eclipse, специально для проектов maven целевая папка будет содержать всю необходимую информацию, поэтому как я могу получить класс и канал для jacoco. Хорошо хоть подскажите - person Rajesh Hatwar; 10.02.2017
comment
@RajeshHatwar, пожалуйста, обновите свой вопрос с точными инструкциями о том, как воспроизвести вашу трудность - в идеале небольшой исполняемый проект (stackoverflow.com/help/mcve ) и я постараюсь помочь - person Godin; 10.02.2017
comment
@RajeshHatwar также имейте в виду, что компилятор Eclipse (который выполняется IDE) создает классы, отличные от тех, которые создаются Oracle javac (который по умолчанию выполняется Maven) - person Godin; 10.02.2017
comment
Спасибо за ваш ответ, я уточню небольшой проект и пропингую вас. - person Rajesh Hatwar; 13.02.2017
comment
загрузите проект Spring MVC с https://github.com/mkyong/spring4-mvc-ajax-example Github. Я использовал сервер WildFly 8.x для запуска проекта и добавил следующие зависимости: maven-surefire-plugin версии 2.19.1, jacoco-maven-plugin версии 0.7.4.201502262128 и junit версии 4.12. Затем я очищаю и строю проект, используя следующие команды. mvn clean, созданный с помощью mvn clean install, как только это будет сделано, получите файл .war из целевой папки проекта и сохраните на сервере wildflywildfly-9.0.0.CR2/standalone/deployments/ - person Rajesh Hatwar; 13.02.2017
comment
После развертывания .war перейдите в папку /wildfly-9.0.0.CR2/bin/ и запустите/запустите файл ./standalone.sh или, в зависимости от платформы, вы можете запустить файл .dat/.sh. - person Rajesh Hatwar; 13.02.2017
comment
Что я сделал, так это после того, как проект был развернут, а сервер запущен и запущен по пути http://localhost:6300/. Я выполнил команду mvn jacoco:dump, после чего она отобразилась как listening to localhost/127.0.0.1:6300 после поиска нескольких критериев. Я остановил сервер и выполнил mvn jaococ:report, он показал все классы, но 0% покрытие - person Rajesh Hatwar; 13.02.2017
comment
вы можете сослаться на этапы выполнения проекта в http://www.mkyong.com/spring-mvc/spring-4-mvc-ajax-hello-world-example/ блоге - person Rajesh Hatwar; 13.02.2017
comment
@RajeshHatwar Ответ был обновлен. Не нужно посылать много пингов по всем доступным каналам - пожалуйста, уважайте тот факт, что у людей есть другие задачи, и они просто не могут выделять все свое свободное время только для вас. - person Godin; 14.02.2017
comment
Годин, действительно, мне очень жаль, если это больно, я боялся, как я могу связаться с вами, но единственная причина, по которой я разместил сообщение на другом канале, чтобы сообщить, что я отредактировал свой вопрос. Спасибо за ваше время, пожалуйста, примите мою благодарность. - person Rajesh Hatwar; 14.02.2017
comment
Я забыл сказать вам, что не могу запустить сервер wildfly с загруженным агентом jacoco jacoco-0.7.9 .jar, потому что при попытке выполнить standalone.sh, установив JAVA_OPTS сервер, возникает ошибка Error opening zip file or JAR manifest missing : /home/user/tmp/jacoco/jacoco-0.7.9/lib/jacocoagent.jar Error occurred during initialization of VM agent library failed to init: instrument - person Rajesh Hatwar; 14.02.2017
comment
Итак, я выбрал `агент jacoco, присутствующий в репозитории .m2 maven`, успешно сгенерировал `jacoco.exec` и не смог преобразовать jacoco.exec в отчеты:] и сгенерированный jacoco.exec может содержать тестовые сценарии, поскольку его размер превышает 2,2 МБ. - person Rajesh Hatwar; 14.02.2017
comment
@RajeshHatwar Не удается прочитать версию данных выполнения 0x1006 - я уже говорил вам везде использовать одни и те же версии! и об этом куча упоминаний в инете - просто погуглите сообщение! Ошибка при открытии zip-файла или отсутствует манифест JAR - также множество причин в Интернете, проверьте, что загруженные и распакованные файлы не повреждены и имеют правильные разрешения! его размер больше 2,2 МБ - да, он может быть большим, но это не проблема - мы генерируем отчеты для файлов более 100 МБ, увеличиваем максимальную память, доступную для JVM, которая генерирует отчеты. - person Godin; 14.02.2017
comment
Godin Большое спасибо за ваше время и помощь, спасибо, что потратили свое время на руководство и помощь для меня, я получаю сообщение об ошибке при запуске сервера wildfly, установив jacocoagent.jar Ошибка при открытии zip-файла или отсутствует манифест JAR` это потому, что в системе Ubuntu во время упоминание абсолютного пути к jacocoagent я полагаю держать в одинарных кавычках! без кавычек или в двойных кавычках выдает вышеупомянутую ошибку. еще раз большое спасибо :) - person Rajesh Hatwar; 16.02.2017
comment
Спасибо Годин. Это очень полезно и работает без проблем. - person raok1997; 26.12.2018