SSS
Jacob ile çıldırdığım zamandan beri kafamın tepesinden gelen sorular.
Irak, Suriye'de bulunan uygulama sunucum (jBoss, Glassfish ..), her neyse .. Üzerinde entegrasyon testleri çalıştırırken çoklu modül kapsamı almak mümkün müdür? Jenkins ve Sonar da farklı sunucularda.
Evet. Modda çalışan jacoco ajanını kullanmalısınız output=tcpserver
, jacoco ant lib. Temelde iki jar
s. Bu size% 99 başarı sağlayacaktır.
Jacob ajanı nasıl çalışır?
Bir dize eklersiniz
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
JAVA_OPTS uygulama sunucunuza bağlayın ve yeniden başlatın. Bu dizede yalnızca [your_path]
, uygulama sunucusunun çalıştığı sanal makinenizde depolanan (saklayın!) Jacocoagent.jar yolu ile değiştirilmesi gerekir. Uygulama sunucusunu başlattığınız andan itibaren, dağıtılan tüm uygulamalar dinamik olarak izlenecek ve etkinlikleri (kod kullanımı anlamında) tcl isteği ile jacocos .exec biçiminde almanız için hazır olacaktır.
Jacoco aracısını, yalnızca testim başladığından beri yürütme verilerini toplamaya başlayacak şekilde sıfırlayabilir miyim?
Evet, bu amaçla jacocoant.jar ve jenkins çalışma alanınızda bulunan ant build betiğine ihtiyacınız var.
Yani temelde http://www.eclemma.org/jacoco/ adresinden ihtiyacım olan şey jenkins çalışma alanımda bulunan jacocoant.jar ve uygulama sunucusu sanal makinemde bulunan jacocoagent.jar mı?
Doğru.
Ant kullanmak istemiyorum, jacoco maven eklentisinin de her şeyi yapabileceğini duydum.
Bu doğru değil, jacoco maven eklentisi birim test verilerini ve bazı entegrasyon testleri verilerini toplayabilir ( bkz.Arquillian Jacoco ), ancak örneğin jenkins'te ayrı bir yapı olarak testlerden eminseniz ve çoklu modül kapsamını göstermek istiyorsanız, Maven eklentisinin size nasıl yardımcı olabileceğini göremiyorum.
Jacoco ajanı tam olarak ne üretir?
Yalnızca .exec
formattaki kapsama verileri . Sonar daha sonra okuyabilir.
Jacoco'nun java sınıflarımın nerede olduğunu bilmesi gerekiyor mu?
Hayır, sonar yok ama jacoco değil. Bunu yaptığınızda mvn sonar:sonar
sınıflara yolunu devreye giriyor.
Peki ya karınca senaryosu?
Jenkins çalışma alanınızda sunulmalıdır. Benim karınca senaryosu, buna jacoco.xml
benziyor dedim :
<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>
Bu komut dosyasını çalıştırırken geçmeniz gereken iki zorunlu parametre, bunu
-Dworkspace=$WORKSPACE
jenkins çalışma alanınıza ve -Djacoco.host=yourappserver.com
ana makinenize işaret etmek için kullanın.http://
Ayrıca jacocoant.jar
$ {workspace} /tools/jacoco/jacocoant.jar'a koyduğuma dikkat edin
Sonra ne yapmalıyım?
Uygulama sunucunuzu jacocoagent.jar ile mi başlattınız?
Jenkins çalışma alanınıza ant script ve jacocoant.jar eklediniz mi?
Cevabınız evet ise, son adım bir jenkins yapısı yapılandırmaktır. İşte strateji:
jacocoReset
Önceden toplanan tüm verileri sıfırlamak için karınca hedefini çağırın .
- Testlerinizi çalıştırın
jacocoReport
Rapor almak için karınca hedefini çağırın
Her şey doğruysa, it-jacoco.exec
derleme çalışma alanınızda göreceksiniz .
Ekran görüntüsüne bakın, ben de ant
çalışma alanıma direk yükledim $WORKSPACE/tools/ant
, ancak jenkins'inizde kurulu olanı kullanabilirsiniz.
Bu raporu sonarda nasıl itebilirim?
Maven sonar:sonar
işi yapacak (yapılandırmayı unutmayın), ana pom.xml'ye işaret ederek tüm modülleri çalıştıracaktır. sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
Sonara entegrasyon testi raporunuzun nerede olduğunu söylemek için parametreyi kullanın . Yeni modül sınıflarını her analiz ettiğinde, kapsamı hakkında bilgi arayacaktır it-jacoco.exec
.
"Target" dizinimde jacoco.exec zaten var, "mvn sonar: sonar" yok sayıyor / kaldırıyor
Varsayılan olarak hedef dizininizi mvn sonar:sonar
yapar clean
ve siler, sonar.dynamicAnalysis=reuseReports
bunu önlemek için kullanın .