Вопросы-Ответы
Вопросы в голове с тех пор, как я сошел с ума от жакоко.
Мой сервер приложений (jBoss, Glassfish ..) находится в Ираке, Сирии, где угодно .. Можно ли получить многомодульное покрытие при выполнении интеграционных тестов? Jenkins и Sonar также находятся на разных серверах.
Да. Вы должны использовать агент jacoco, который работает в режиме output=tcpserver
jacoco ant lib. В основном два jar
с. Это даст вам 99% успеха.
Как работает jacoco agent?
Вы добавляете строку
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
к серверу приложений JAVA_OPTS и перезапустите его. В этой строке [your_path]
необходимо заменить только путь к jacocoagent.jar, который хранится (хранится!) На вашей виртуальной машине, на которой работает сервер приложений. С того момента, как вы запустите сервер приложений, все развернутые приложения будут динамически отслеживаться, и их активность (то есть использование кода) будет готова для вас, чтобы вы могли получить в формате jacocos .exec по запросу tcl.
Могу ли я сбросить агент jacoco, чтобы он начал сбор данных о выполнении только с момента запуска моего теста?
Да, для этого вам понадобится jacocoant.jar и скрипт сборки ant, расположенный в вашем рабочем пространстве jenkins.
Итак, в основном то, что мне нужно от http://www.eclemma.org/jacoco/, - это jacocoant.jar, расположенный в моем рабочем пространстве jenkins, и jacocoagent.jar, расположенный на моей виртуальной машине сервера приложений?
Это правильно.
Я не хочу использовать ant, я слышал, что плагин jacoco maven тоже может все.
Это неправильно, плагин jacoco maven может собирать данные модульных тестов и некоторые данные интеграционных тестов (см. Arquillian Jacoco ), но если у вас, например, есть тесты в виде отдельной сборки в jenkins, и вы хотите показать многомодульное покрытие, я могу Не понимаю, чем плагин maven может вам помочь.
Что именно производит агент jacoco?
Только данные о покрытии в .exec
формате. После этого сонар сможет это прочитать.
Нужно ли jacoco знать, где находятся мои классы Java?
Нет, эхолот, но не jacoco. Когда вы делаете mvn sonar:sonar
это, в игру вступает путь к классам.
Так что насчет сценария муравья?
Он должен быть представлен в вашем рабочем пространстве jenkins. Мой скрипт муравья, я его назвал, 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
используйте его, чтобы указать на вашу рабочую область jenkins и -Djacoco.host=yourappserver.com
хост безhttp://
Также обратите внимание, что я помещаю свой jacocoant.jar
в $ {workspace} /tools/jacoco/jacocoant.jar
Что я должен делать дальше?
Вы запустили сервер приложений с jacocoagent.jar?
Вы поместили ant script и jacocoant.jar в рабочее пространство jenkins?
Если да, последний шаг - настроить сборку jenkins. Вот стратегия:
- Вызов ant target
jacocoReset
для сброса всех ранее собранных данных.
- Проведите свои тесты
- Вызвать цель муравья,
jacocoReport
чтобы получить отчет
Если все в порядке, вы увидите it-jacoco.exec
в своем рабочем пространстве сборки.
Посмотрите на снимок экрана, я также ant
установил в своей рабочей области в $WORKSPACE/tools/ant
каталоге, но вы можете использовать тот, который установлен в ваших jenkins.
Как протолкнуть этот отчет в сонар?
Maven sonar:sonar
выполнит задание (не забудьте настроить его), направьте его на главный pom.xml, чтобы он прошел через все модули. Используйте sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
параметр, чтобы сообщить эхолоту, где находится ваш отчет о тестировании интеграции. Каждый раз, когда он будет анализировать новые классы модулей, он будет искать информацию о покрытии в it-jacoco.exec
.
У меня уже есть jacoco.exec в моем каталоге `target`,` mvn sonar: sonar` игнорирует / удаляет его
По умолчанию mvn sonar:sonar
делает clean
и удаляет ваш целевой каталог, используйте, sonar.dynamicAnalysis=reuseReports
чтобы избежать этого.