FAQ
Питання зверху в голові з того часу, як я з глузду зійшов з якоко.
Мій сервер додатків (jBoss, Glassfish ..), розташований в Іраку, Сирії, як би там не було .. Чи можливо отримати багатомодульне покриття під час запуску інтеграційних тестів на ньому? Дженкінс і Сонар також на різних серверах.
Так. Ви повинні використовувати агент, який працює в режимі output=tcpserver
, мукомольна мурашка. В основному дваjar
с. Це дасть вам 99% успіху.
Як діє агент «Якоко»?
Ви додаєте рядок
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
на сервер додатків JAVA_OPTS і перезавантажте його. Лише в цьому рядку[your_path]
замінити шлях до jacocoagent.jar, зберігати (зберігати його!) У вашій машині вільного доступу, де працює сервер додатків. З цього часу, коли ви запускаєте сервер додатків, усі розгорнуті додатки будуть динамічно відстежуватися, і їх активність (тобто використання коду) буде готова до отримання у форматі jacocos .exec за запитом tcl.
Чи можу я скинути jacoco агент, щоб почати збирати дані про виконання лише з моменту початку мого тесту?
Так, для цього вам потрібен сценарій jacocoant.jar та мурахи, розташований у вашій робочій області jenkins.
Отже, що мені потрібно від http://www.eclemma.org/jacoco/, це jacocoant.jar, розташований у моїй робочій області jenkins, і jacocoagent.jar, розміщений на моєму сервері програм VM?
Це вірно.
Я не хочу використовувати мурашок, я чув, що плагін jacoco maven теж може робити все.
Це неправильно, плагін jacoco maven може збирати дані про тести блоку та деякі дані інтеграційних тестів (див. Arquillian Jacoco ), але якщо у вас є, наприклад, спокійні тести, як окрема збірка в джинкінах, і хочете показати багатомодульне покриття, я можу Не бачу, як плагін Maven може вам допомогти.
Що саме виробляє агент Якоко?
Лише дані покриття в .exec
форматі. Тоді Сонар може це прочитати.
Чи потрібно якоко знати, де знаходяться мої класи java?
Ні, сонар робить, але не якоко. Коли ви робитеmvn sonar:sonar
шлях до занять, вступає в гру.
То як щодо сценарію мурашок?
Він повинен бути представлений у вашому робочому просторі джинкінів. Сценарій моєї мурашки, я назвав це jacoco.xml
так:
<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>
Дві обов'язкові параметри, які вам слід пройти, коли ви посилаєтесь на цей сценарій,
-Dworkspace=$WORKSPACE
використовуйте його для вказівки на робочу область і -Djacoco.host=yourappserver.com
хост без jenkinshttp://
Також зауважте, що я помістив його jacocoant.jar
в $ {workpace} /tools/jacoco/jacocoant.jar
Що мені робити далі?
Ви запустили свій сервер додатків з jacocoagent.jar?
Ви помістили мурашиний скрипт та jacocoant.jar у робочу область для дженкінсів?
Якщо так, то останнім кроком є налаштування збірки джинкінів. Ось стратегія:
- Викликати мурашину ціль,
jacocoReset
щоб скинути всі раніше зібрані дані.
- Запустіть свої тести
- Викликайте мурашку,
jacocoReport
щоб отримати звіт
Якщо все в порядку, ви побачите it-jacoco.exec
у робочій області побудови.
Подивіться на скріншот, я також ant
встановив у своїй робочій області в режимі $WORKSPACE/tools/ant
dir, але ви можете використовувати той, який встановлений у ваших джинкінах.
Як просунути цей звіт у сонарі?
Maven sonar:sonar
зробить роботу (не забудьте її налаштувати), вкажіть її на головний pom.xml, щоб він працював через усі модулі. Використовуйте sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
параметр, щоб повідомити сонару, де знаходиться ваш звіт про тест інтеграції. Кожен раз, коли він буде аналізувати нові класи модулів, він шукатиме інформацію про покриття в it-jacoco.exec
.
У мене вже є jacoco.exec у своєму `target 'dir,` mvn sonar: sonar` ігнорує / видаляє його
За замовчуванням mvn sonar:sonar
робить clean
і видаляє цільовий режим, використовуйте, sonar.dynamicAnalysis=reuseReports
щоб уникнути цього.