Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Layanan Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022
Cakupan kode membantu Anda menentukan proporsi kode proyek Anda yang sebenarnya sedang diuji, seperti oleh pengujian unit. Untuk meningkatkan keyakinan Anda terhadap perubahan kode dan melindungi secara efektif terhadap bug, pengujian Anda sebaiknya menjalankan atau mencakup proporsi besar kode Anda.
Saat meninjau hasil cakupan kode, Anda dapat mengidentifikasi jalur kode yang tidak dicakup pengujian. Informasi ini membantu Anda meningkatkan cakupan pengujian dari waktu ke waktu dengan mengurangi utang pengujian.
Artikel ini memperlihatkan kepada Anda cara menampilkan, mengonfigurasi, dan memecahkan masalah cakupan kode di Azure Pipelines. Anda mempelajari cara menyiapkan cakupan berbeda untuk permintaan pull, mengonfigurasi kebijakan cakupan, dan menyelesaikan masalah umum.
Nota
Meskipun Anda dapat membuat kode dari berbagai sistem kontrol versi yang didukung Azure Pipelines, cakupan kode untuk fitur permintaan pull yang dibahas dalam artikel ini saat ini hanya tersedia untuk Azure Repos.
Format, tugas, dan artefak yang didukung
Format yang didukung
Azure Pipelines dapat menerbitkan hasil cakupan, melalui tugas Terbitkan Hasil Cakupan Kode v2. Tugas dapat menampilkan hasil dalam 2 tampilan berbeda:
- Untuk format cobertura, jacoco, clover, gcov, pcov, dan xml lainnya, tampilan HTML yang dihasilkan berisi detail lebih lanjut dari laporan cakupan kode dan lebih disukai oleh sebagian besar pelanggan.
- Untuk
.coverage/.cjson/.covx– tampilan tabular dihasilkan, berisi lebih sedikit detail daripada tampilan HTML.
Artefak dan hasil
Anda dapat melihat artefak cakupan kode yang diterbitkan selama build di bawah tab Ringkasan pada ringkasan eksekusi alur.
Selain itu, Anda dapat meninjau hasil dari laporan cakupan kode di tab Cakupan Kode :
- Jika Anda menerbitkan cakupan kode menggunakan format cakupan Cobertura atau JaCoCo, artefak cakupan kode berisi sebuah file
.htmlyang dapat dilihat secara offline untuk analisis lanjutan.
- Untuk .NET dan .NET Core, Anda dapat mengakses tautan untuk mengunduh artefak dengan memilih tonggak cakupan kode dalam ringkasan build.
-
Visual Studio Test dapat mengumpulkan cakupan untuk aplikasi .NET dan .NET Core. Ini menghasilkan
.coveragefile yang dapat Anda unduh dan gunakan untuk analisis lebih lanjut di Visual Studio.
Tasks
Publikasikan Hasil Cakupan Kode menerbitkan hasil cakupan kode ke Azure Pipelines, yang dihasilkan oleh build dalam format Cobertura atau JaCoCo.
Tugas bawaan seperti Visual Studio Test, .NET Core, Ant, Maven, Gulp, Grunt, dan Gradle menyediakan opsi untuk menerbitkan data cakupan kode ke alur.
Pertimbangan Docker
Untuk aplikasi yang menggunakan Docker, Anda dapat menjalankan build dan pengujian di dalam kontainer dan menghasilkan hasil cakupan kode dalam kontainer. Untuk menerbitkan hasil ke pipeline, buat artefak yang dihasilkan tersedia untuk tugas Terbitkan Hasil Cakupan Kode. Untuk referensi, lihat contoh serupa untuk menerbitkan hasil pengujian di bawah bagian Membangun, menguji, dan menerbitkan hasil dengan file Docker untuk Docker.
Pertimbangan penting
- Dalam pipeline multi-tahap YAML, hasil cakupan kode hanya tersedia setelah seluruh pipeline selesai. Anda mungkin perlu memisahkan tahap build ke dalam alurnya sendiri jika Anda ingin meninjau hasil cakupan kode sebelum menyebarkan ke produksi.
- Menggabungkan hasil cakupan kode dari beberapa eksekusi pengujian saat ini hanya berfungsi untuk .NET dan .NET Core. Tidak ada rencana untuk mendukung format lain.
Cakupan penuh vs cakupan perbedaan
Cakupan penuh mengukur cakupan untuk seluruh basis kode proyek. Dalam konteks permintaan pull, pengembang berfokus pada perubahan yang mereka buat dan ingin mengetahui apakah baris kode tertentu yang ditambahkan atau diubah tercakup. Jenis cakupan ini adalah cakupan diff.
Pengaturan cakupan YAML berbeda dari alur YAML karena pengaturan cakupan berlaku untuk repositori Anda dan digunakan terlepas dari alur mana yang membangun kode Anda. Pemisahan ini juga berarti bahwa jika Anda menggunakan alur build yang berbasis perancang klasik, Anda akan mendapatkan pemeriksaan status cakupan kode untuk permintaan penarikan.
Indikator cakupan muncul dalam tampilan file yang diubah terlepas dari apakah detail komentar permintaan pull diaktifkan.
Mengonfigurasi cakupan diff
Untuk mengubah pengaturan default pengalaman cakupan kode untuk permintaan pull, sertakan file YAML konfigurasi bernama azurepipelines-coverage.yml di akar repositori Anda. Atur nilai yang diinginkan dalam file ini, dan Azure DevOps menggunakannya secara otomatis saat alur berjalan.
Anda dapat mengubah pengaturan berikut:
Konfigurasi contoh
coverage:
status: # Code coverage status will be posted to pull requests based on targets defined below.
comments: on # Off by default. When on, details about coverage for each file changed will be posted as a pull request comment.
diff: # Diff coverage is code coverage only for the lines changed in a pull request.
target: 60% # Set this to a desired percentage. Default is 70 percent
Anda dapat menemukan lebih banyak contoh dengan detail dalam cakupan kode repositori sampel YAML.
Status cakupan, detail, dan indikator
Saat Anda menyiapkan pipeline untuk mengumpulkan dan menerbitkan cakupan kode, status cakupan kode akan diposting ketika Anda membuat pull request. Secara default, server memeriksa bahwa pengujian mencakup setidaknya 70% baris yang diubah. Anda dapat mengubah target ambang batas cakupan diff menjadi nilai yang Anda pilih dengan memodifikasi parameter target yang disebutkan sebelumnya.
Pemeriksaan status menghitung cakupan perbedaan untuk semua file dalam pull request. Untuk melihat persentase untuk setiap file, aktifkan Detail seperti yang dijelaskan di bagian sebelumnya. Saat diaktifkan, sistem memposting detail sebagai komentar pada permintaan pull.
Dalam tampilan file yang diubah dari permintaan pull, baris yang diubah juga dianotasi dengan indikator cakupan untuk menunjukkan apakah baris tersebut tercakup.
Menerapkan perlindungan cabang dengan kebijakan cakupan kode
Secara bawaan, pemeriksaan status cakupan kode pada permintaan pull bersifat opsional - tidak menghalangi penggabungan dengan cakupan rendah. Untuk memastikan perubahan memenuhi ambang batas cakupan minimum sebelum penggabungan, konfigurasikan kebijakan cabang yang menggunakan pemeriksaan status cakupan.
Status cakupan kode yang diposting dari alur mengikuti konvensi {name-of-your-pipeline/codecoverage} penamaan.
Nota
- Kebijakan cabang di Azure Repos (bahkan kebijakan opsional) mencegah permintaan pull selesai secara otomatis jika gagal. Perilaku ini bukan khusus untuk kebijakan cakupan kode.
- Kebijakan cakupan kode tidak diubah menjadi "Gagal" jika proses build mengalami kegagalan.
Panduan pemecahan masalah
Mengapa saya melihat DLL duplikat dalam tampilan cakupan tab Cakupan Kode?
Anda mungkin melihat DLL duplikat ketika .NET Core dan .NET Framework digunakan dalam jalur pemrosesan. Harapkan DLL duplikat ketika keduanya digunakan, yang dirancang karena modul yang sama berasal dari jalur yang berbeda.
Mengapa tidak ada data cakupan di tab Cakupan Kode?
Beberapa alasan dapat menyebabkan masalah ini:
Tidak ada pengujian atau DLL yang ada: Jika file tidak berisi pengujian atau DLL, nilai cakupannya adalah 0. Azure DevOps tidak menampilkan data cakupan kode di tab saat nilai cakupan adalah 0. Sebaliknya, ini menunjukkan pesan di bawah tab Cakupan Kode yang menjelaskan mengapa tidak ada data cakupan.
XML cakupan kosong: Saat Anda menggunakan tugas Terbitkan Cakupan Kode, jika cakupan
.xmlyang diberikan sebagai input tidak berisi informasi apa pun atau tidak memiliki garis yang tercakup, tidak ada data cakupan yang muncul di bawah tab. Periksa mengapa file cakupan.xml(file input) kosong atau tidak memiliki informasi.Kegagalan Build: Jika build gagal, tab cakupan kode akan muncul dengan pesan yang tepat.
Konfigurasi tugas VSTest: Saat Anda menggunakan tugas VSTest, jika Anda tidak mengaktifkan pemeriksaan cakupan kode atau jika Anda menyebutkan DLL yang salah atau jalur yang salah untuk menguji file di bidang Filter pengujian, data cakupan tidak ditampilkan.
Masalah konfigurasi build: Terkadang ada beberapa nilai konfigurasi build dan Anda tidak mengatur semua nilai seperti BuildFlavour atau BuildPlatform. UI hanya menunjukkan nilai konfigurasi build tertentu, itulah sebabnya modul lain hilang.
File HTML besar: Jika
.htmlfile lebih besar dari 7 MB, laporan tidak tersedia di tab Cakupan Kode. Sebagai solusinya, unduh artefak "Cakupan Kode Report_*" dari artefak yang diterbitkan di Ringkasan.Pesan kegagalan: Jika tab Cakupan Kode berisi pesan kegagalan yang terkait dengan kesalahan khusus pengguna, selidiki apa yang memicu pesan kesalahan tersebut.
Apa yang harus saya lakukan jika Pemeriksaan Status Cakupan Kode tidak pernah selesai atau gagal?
Untuk mengaktifkan pemeriksaan status cakupan kode, coba tambahkan azurepipelines-coverage.yml file di akar repositori. Pastikan nama file tetap sama persis. Berikut adalah sebuah contoh:
coverage:
status:
comments: on
diff:
target: 50%
Jika pemeriksaan status cakupan gagal:
- Periksa persentase cakupan perbedaan. Jika lebih kecil dari target, coba tingkatkan persentase cakupan diff.
- Jika build gagal karena alasan apa pun, kegagalan ini juga dapat menyebabkan pemeriksaan status cakupan kode gagal.
- Periksa tugas mana yang menghasilkan file cakupan atau laporan dalam pipeline. Verifikasi apakah tugas mengunggah laporan atau file cakupan dengan benar.
- Kasus di mana komentar cakupan perbedaan menunjukkan "Tidak ada perubahan yang dapat dieksekusi" atau "Tidak ada data cakupan kode yang ditemukan" dapat terjadi karena baris dihapus, penambahan spasi kosong, atau penambahan komentar. Kasus-kasus ini adalah perubahan yang tidak dapat dieksekusi dan tidak signifikan, sehingga cakupan kode tidak melaporkannya.
Bagaimana cara mengecualikan beberapa DLL dari cakupan kode?
Untuk mengecualikan file dari penutup kode, gunakan class ExcludeFromCodeCoverageAttribute.
Bagaimana cara menerbitkan ringkasan cakupan kode dengan detail yang tepat dengan menggabungkan beberapa file ringkasan?
Tugas Publikasi Cakupan Kode V1 tidak mendukung beberapa file ringkasan sebagai input. Sebagai gantinya, gunakan tugas Terbitkan Cakupan Kode V2, yang mendukung beberapa format file.
Anda juga dapat menggunakan tugas Generator Laporan untuk menggabungkan semua .xml file lalu meneruskan jalur XML yang dihasilkan sebagai input ke tugas Terbitkan Cakupan Kode.
Bagaimana cara memicu pemeriksaan cakupan kode?
Untuk .html file, pemeriksaan status cakupan tidak didukung. Gunakan Build Quality Checks task untuk memeriksa hasil cakupan kode.
Laporan pada tab Cakupan Kode berisi angka yang tidak akurat
Data yang ditampilkan pada tab berasal dari file cakupan. Jika Anda menggunakan tugas kustom untuk menghasilkan file cakupan kode, periksa apakah file kehilangan DLL atau file apa pun.
Kebijakan cakupan kode macet—apa penyebabnya?
Beberapa faktor dapat menyebabkan masalah ini:
Format nama kebijakan cabang yang salah: Verifikasi nama alur cocok dengan nama kebijakan cabang dan tidak memiliki karakter tambahan.
Menggunakan PublishCodeCoverage V1: Kebijakan cakupan kode macet dan komentar tidak dihasilkan. Gunakan tugas PublishCodeCoverage V2 sebagai gantinya.
Terlalu banyak file dalam PR: Jika PR memiliki lebih dari 100 file, kebijakan cakupan akan terhenti.
Beberapa kebijakan cakupan: Jika Anda mengonfigurasi beberapa kebijakan cakupan, salah satunya macet. Konfigurasikan hanya satu kebijakan dan hapus kebijakan macet lainnya.
Saya melihat cakupan 0% berbeda untuk PR saya bahkan setelah menambahkan tes
Jika Anda menambahkan tes untuk mencakup baris kode yang dimodifikasi atau baru dalam PR dan melihat masih cakupan perbedaan 0%:
- Verifikasi bahwa pengujian yang baru ditambahkan dijalankan sebagai bagian dari proses build.
- Jika pengujian tidak berjalan, verifikasi dan perbarui konfigurasi untuk menyertakannya dalam build, karena cakupan tidak dapat dihitung jika pengujian tidak berjalan.
Saya tidak melihat komentar cakupan berbeda di PR meskipun saya melihat laporan cakupan yang diterbitkan
Beberapa faktor dapat menyebabkan masalah ini:
- Versi tugas: Komentar cakupan berbeda hanya didukung dengan Cakupan Kode Publikasi V2.
- Tidak ada perubahan yang dapat dieksekusi: Komentar cakupan diff dihasilkan untuk file dengan perubahan kode yang dapat dieksekusi. Jika PR hanya terdiri dari pembaruan konfigurasi, Azure DevOps mungkin menampilkan cakupan kode berdasarkan semua pengujian yang dijalankan selama build, tetapi mungkin tidak ada perbedaan cakupan untuk dihitung.
- Format cakupan: Jika ada perubahan kode fungsi dan komentar tidak dihasilkan, verifikasi bahwa alur menghasilkan laporan cakupan dalam salah satu format yang didukung yang disebutkan di awal artikel ini.
Di tab Cakupan Kode, saya tidak melihat laporan HTML yang tepat
Ketika ada masalah saat menghasilkan .html laporan, sistem kembali ke tampilan yang disederhanakan.
Alat cakupan dan format hasil mana yang dapat digunakan untuk memvalidasi cakupan kode dalam permintaan pull?
Saat ini, Anda hanya dapat menggunakan format cakupan Visual Studio Code (.coverage) untuk memvalidasi cakupan kode untuk permintaan pull. Gunakan format ini jika Anda menerbitkan cakupan kode (code coverage) dengan menggunakan tugas Uji Visual Studio, perintah pengujian dari tugas .NET Core, dan opsi TRX dari tugas Menerbitkan Hasil Pengujian.
Jika beberapa pipa dipicu saat permintaan pull dibuat, apakah cakupan akan digabungkan antar pipa?
Jika beberapa pipeline dipicu saat permintaan pull dibuat, cakupan kode tidak bergabung. Kemampuan ini saat ini dirancang untuk satu pipeline yang mengumpulkan dan menerbitkan cakupan kode untuk pull request. Jika Anda perlu menggabungkan data cakupan di seluruh alur, kirimkan permintaan fitur di Komunitas Pengembang.