среда, 23 января 2019 г.

Простой пример использования JaCoCo через IDE IntelliJ IDEA для анализа покрытия кода интеграционными Cucumber тестами

JaCoCo это распространенная библиотека для анализа покрытия кода.
В этой статье будет приведен простой пример использования JaCoCo агента через IDE IntelliJ IDEA. Этот пример подойдет для случая если нам требуется узнать покрытие внешними интеграфионными тестами, которые работают с запущенным или развернутым приложением.
Описаный ниже способ НЕ подойдет для анализа покрытия Unit тестами, т.к. юнит тесты выполняются при сборке проекта, а не на запущенном приложении.
Запуск или развертывание приложения будет производится через IDE IntelliJ IDEA IDE 2018.1, при желании подобным образом можно также написать скрипт для запуска приложения.

1. Для начала скачиваем архив с JaCoCo с сайта https://www.jacoco.org/jacoco/. На момент написания статьи последняя версия JaCoCo - 0.8.2.
Мы будем использовать для анализа покрытия JaCoCo Java Agent. Файл JaCoCo Java Agent находится в архиве с библиотекой по пути \lib\jacocoagent.jar

2. Распаковываем jacoco-0.8.2.zip в любое удобное место, например в D:/jacoco-0.8.2.

3. В IDEA открываем наш проект, заходим в Run -> Edit Configurations.

4. Если мы используем конфигурацию Tomcat Server, то ищем параметр VM options. Для других конфигураций ищем похожий по смылу (в зависимости от типа выбранной конфигурации запуска название параметра может отличаться).
Устанавливаем значение этого параметра, например, как показано ниже.



-javaagent:D:\jacoco-0.8.2\lib\jacocoagent.jar=destfile=D:/jacoco.exec,output=file,append=false,includes=my.company.*

Сразу после javaagent: указан на путь к JaCoCo java агенту.
Параметр destfile указывает на путь куда будет записан отчет о покрытии (coverage report). Здесь мы указали destfile=D:/jacoco.exec.
Параметр output - тип вывода. Может быть file, tcpserver, tcpclient, none
Параметр includes - позволяет ограничить список классов для анализа покрытия. Нас интересует только покрытие классов в проекте, и не интересует покрытие в классах подключенных библиотек, поэтому нужно добавить ограничение по пакету my.company.* (здесь нужно указать свои пакеты). Такое ограничение не обязательно, но его желательно добавлять, т.к. обычно оно очень существенно уменьшает размер файла отчета.
Более подробно про параметры JaCoCo агента можно почитать здесь

5. Применяем нашу конфигурацию и запускаем её используя команду Run.

6. Теперь мы можем запустить внешние тесты для которых мы хотим проверить покрытие. Это могут быть тесты на основе BDD фремворка Cucumber. По окончании работы тестов необходимо будет остановить приложение. Отчет по покрытию будет создан в момент остановки приложения по пути указанному в параметре destfile.

7. После создания отчета его можно импортировать и IDE чтобы посмотреть покрытие по классам и строкам. Это можно сделать используя меню Analyze -> Show Coverage Data, и выбрав там соответствующий .exec файл отчета.

Комментариев нет:

Отправить комментарий

Ярлыки

java (31) оптимизация (7) CPanel (5) svn (5) windows xp (5) ошибка (5) свой сервер (5) файлы и папки (5) gui (4) регулярные выражения (4) jacoco (3) redmine (3) windows (3) автоматизация (3) защита данных (3) резервное копирование (3) сервер (3) JavaScript (2) Oracle SQL (2) adsl модем (2) apache maven (2) apache tomcat (2) coverage (2) dropbox (2) excel (2) firewall (2) netbeans (2) office 2007 (2) samsung (2) system tray (системный трей) (2) xerox (2) вирусы (2) принтер (2) сериализация (2) удаленный рабочий стол (2) HTML (1) JFileChooser (1) MySQL (1) Nokia (1) Ovi (1) P660R-T1 (1) WakeOnLan (1) blogger.com (1) ctfmon.exe (1) email (1) flash память (1) ftp (1) integration testing (1) ip (1) jQuery (1) jvisualWm (1) log4j (1) look and feel (1) myBatis (1) php (1) serialVersionUID (1) skype (1) smtp (1) ssh (1) swing (1) torrents (1) unit-testing (1) unix (1) vpn (1) windows 7 (1) xStarter (1) zip (1) безопасность (1) вход в систему (1) дизайн (1) документация (1) заправка (1) интернет (1) логирование (1) мышь (1) патч (1) перенос (1) печать (1) плагины (1) почтовые сообщения (1) программирование (1) процессы (1) прошивка (1) сеть (1) сеть. ошибка (1) скрытые файлы (1) списки (1) фильтрация (1) фокус (1) часовые пояса (1) шифрование (1) экран (1)