ЧЗВ
Въпроси от върха на главата ми, откакто полудях по жакоко.
Моят сървър за приложения (jBoss, Glassfish..), намиращ се в Ирак, Сирия, каквото и да е.. Възможно ли е да се получи многомодулно покритие, когато се изпълняват интеграционни тестове на него? Дженкинс и Сонар също са на различни сървъри.
да Трябва да използвате jacoco агент, който работи в режим output=tcpserver
, jacoco ant lib . По принцип две 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?
Това е вярно.
Не искам да използвам ant, чувал съм, че плъгинът jacoco maven също може да прави всички неща.
Това не е правилно, плъгинът jacoco maven може да събира данни от модулни тестове и някои данни от интеграционни тестове (вижте Arquillian Jacoco), но ако имате например сигурни тестове като отделна компилация в jenkins и искате да покажете многомодулно покритие, не виждам как плъгинът maven може да ви помогне.
Какво точно произвежда жакоко агентът?
Само данни за покритие във формат .exec
. След това сонарът може да го разчете.
Трябва ли jacoco да знае къде се намират моите java класове?
Не, сонарът го прави, но не и жакоко. Когато направите mvn sonar:sonar
пътят към класовете влиза в действие.
И така, какво ще кажете за скрипта на мравката?
Трябва да бъде представен във вашето работно пространство на jenkins. Моят ant скрипт, нарекох го 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
, за да нулирате всички събрани преди това данни.
- Пуснете вашите тестове
- Извикайте ant target
jacocoReport
, за да получите отчет
Ако всичко е наред, ще видите it-jacoco.exec
във вашето работно пространство за изграждане.
Погледнете екранната снимка, аз също имам ant
инсталиран в моето работно пространство в $WORKSPACE/tools/ant
dir, но можете да използвате такъв, който е инсталиран във вашия jenkins.
![въведете описание на изображението тук](https://i.stack.imgur.com/oX9hk.png)
Как да прокарам този отчет в сонара?
Maven sonar:sonar
ще свърши работата (не забравяйте да го конфигурирате), насочете го към main 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
, за да го избегнете.
person
ZuzEL
schedule
23.05.2014