FAQ
Pertanyaan dari atas kepala saya sejak saat itu saya menjadi gila dengan jacoco.
Server aplikasi saya (jBoss, Glassfish ..) berlokasi di Irak, Suriah, apa saja .. Apakah mungkin mendapatkan cakupan multi-modul saat menjalankan uji integrasi? Jenkins dan Sonar juga berada di server yang berbeda.
Iya. Anda harus menggunakan agen jacoco yang berjalan dalam mode output=tcpserver
, jacoco ant lib. Pada dasarnya dua jar
s. Ini akan memberi Anda 99% kesuksesan.
Bagaimana cara kerja agen jacoco?
Anda menambahkan string
-javaagent:[your_path]/jacocoagent.jar=destfile=/jacoco.exec,output=tcpserver,address=*
ke server aplikasi Anda JAVA_OPTS dan mulai ulang. Dalam string ini saja[your_path]
perlu diganti dengan jalur ke jacocoagent.jar, disimpan (simpan!) Di VM Anda tempat server aplikasi berjalan. Sejak saat itu Anda memulai server aplikasi, semua aplikasi yang diterapkan akan dipantau secara dinamis dan aktivitasnya (yang berarti penggunaan kode) akan siap untuk Anda dapatkan dalam format jacocos .exec oleh permintaan tcl.
Bisakah saya mengatur ulang agen jacoco untuk mulai mengumpulkan data eksekusi hanya sejak pengujian saya dimulai?
Ya, untuk itu Anda membutuhkan skrip jacocoant.jar dan ant build yang terletak di ruang kerja jenkins Anda.
Jadi pada dasarnya yang saya butuhkan dari http://www.eclemma.org/jacoco/ adalah jacocoant.jar terletak di ruang kerja jenkins saya, dan jacocoagent.jar ada di VM server aplikasi saya?
Betul sekali.
Saya tidak ingin menggunakan semut, saya pernah mendengar bahwa plugin jacoco maven dapat melakukan semua hal juga.
Itu tidak benar, plugin jacoco maven dapat mengumpulkan data pengujian unit dan beberapa data pengujian integrasi (lihat Arquillian Jacoco ), tetapi jika Anda misalnya memiliki pengujian terjamin sebagai build terpisah di jenkins, dan ingin menunjukkan cakupan multi-modul, saya bisa Saya tidak melihat bagaimana plugin maven dapat membantu Anda.
Apa sebenarnya yang diproduksi oleh agen jacoco?
Hanya data cakupan dalam .exec
format. Sonar kemudian bisa membacanya.
Apakah jacoco perlu tahu di mana lokasi kelas java saya?
Tidak, sonar melakukannya, tapi tidak jacoco. Saat kamu melakukanmvn sonar:sonar
jalur ke kelas mulai berlaku.
Lalu bagaimana dengan skrip semut?
Itu harus disajikan di ruang kerja jenkins Anda. Skrip semut saya, saya menyebutnya jacoco.xml
terlihat seperti itu:
<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>
Dua parameter wajib yang harus Anda lewati saat menjalankan skrip ini,
-Dworkspace=$WORKSPACE
gunakan untuk mengarahkan ke ruang kerja jenkins dan -Djacoco.host=yourappserver.com
tanpa hosthttp://
Juga perhatikan bahwa saya meletakkan saya jacocoant.jar
ke $ {workspace} /tools/jacoco/jacocoant.jar
Apa yang harus saya lakukan selanjutnya?
Apakah Anda memulai server aplikasi Anda dengan jacocoagent.jar?
Apakah Anda meletakkan skrip semut dan jacocoant.jar di ruang kerja jenkins Anda?
Jika ya, langkah terakhir adalah mengkonfigurasi build jenkins. Berikut strateginya:
- Panggil target semut
jacocoReset
untuk mengatur ulang semua data yang dikumpulkan sebelumnya.
- Jalankan pengujian Anda
- Panggil target semut
jacocoReport
untuk mendapatkan laporan
Jika semuanya benar, Anda akan lihat it-jacoco.exec
di ruang kerja build Anda.
Lihat tangkapan layar, saya juga telah ant
menginstal di ruang kerja saya di $WORKSPACE/tools/ant
dir, tetapi Anda dapat menggunakan yang diinstal di jenkins Anda.
Bagaimana cara mendorong laporan ini di sonar?
Maven sonar:sonar
akan melakukan pekerjaan itu (jangan lupa untuk mengkonfigurasinya), arahkan ke pom.xml utama sehingga akan dijalankan melalui semua modul. Gunakan sonar.jacoco.itReportPath=$WORKSPACE/it-jacoco.exec
parameter untuk memberi tahu sonar di mana laporan pengujian integrasi Anda berada. Setiap kali akan menganalisis kelas modul baru, ia akan mencari informasi tentang cakupan di it-jacoco.exec
.
Saya sudah memiliki jacoco.exec di direktori `target` saya,` mvn sonar: sonar` mengabaikan / menghapusnya
Secara default mvn sonar:sonar
tidak clean
dan menghapus direktori target Anda, gunakan sonar.dynamicAnalysis=reuseReports
untuk menghindarinya.