Bazel,
bazel coverage ile test edilebilen kod depolarıyla ilgili kod kapsamı raporları üretmek için bir
coverage alt komutu içerir. Çeşitli dil ekosistemlerinin dezavantajları nedeniyle, her proje için bunu sağlamak her zaman kolay değildir.
Bu sayfada, kapsam raporları oluşturma ve görüntülemeyle ilgili genel süreç açıklanmaktadır. Ayrıca, yapılandırması iyi bilinen diller için dile özgü notlar da yer alır. İlk olarak genel bölümü, ardından belirli bir dilin şartlarını okuyun. Ayrıca, bazı ek hususlar gerektiren uzaktan yürütme bölümüne de dikkat edin.
Çok sayıda özelleştirme mümkün olsa da bu belge, şu anda en iyi desteklenen rota olan
lcov raporlarının üretilmesine ve kullanılmasına odaklanmaktadır.
Kapsam raporu oluşturma
Hazırlık
Kapsam raporları oluşturmak için temel iş akışı aşağıdakileri gerektirir:
- Test hedefleri olan temel depo
- Dile özgü kod kapsamı araçlarının yüklü olduğu bir araç zinciri
- Doğru "araç" yapılandırması
İkinci ikisi daha çok dile özgüdür ve çoğunlukla basittir. Ancak ikinci yöntem karmaşık projeler için daha zor olabilir.
Bu durumda "araç" belirli bir hedef için kullanılan kapsam araçlarını ifade eder. Bazel,
--instrumentation_filter
işaretini kullanarak belirli bir dosya alt kümesi için bu özelliği etkinleştirmenize olanak tanır. Testlerde enstrümantasyonu etkinleştirmek için
--instrument_test_targets işareti gerekir.
Varsayılan olarak bazel, hedef paketleri eşleştirmeye çalışır ve ilgili filtreyi
INFO mesajı olarak yazdırır.
Yayın kapsamı
Kapsam raporu oluşturmak için
bazel coverage
--combined_report=lcov
[target]'nu kullanın. Bu işlem, hedefle ilgili testleri çalıştırır ve her dosya için lcov biçiminde kapsam raporları oluşturur.
İşlem tamamlandığında, bazel üretilen tüm kapsam dosyalarını toplayan bir işlem yürütür ve bunları tek bir dosyada birleştirir. Bu dosyalar, daha sonra
$(bazel info
output_path)/_coverage/_coverage_report.dat altında oluşturulur.
Kapsam raporları da başarısız olursa testler oluşturulur. Ancak bu raporun başarısız olan testleri kapsamadığını, yalnızca başarılı testler raporlandığını unutmayın.
Görüntüleme kapsamı
Kapsam raporu, yalnızca kullanıcıların okuyamadığı
lcov biçiminde yayınlanır. Ardından, web tarayıcısında görüntülenebilen bir rapor oluşturmak için
genhtml yardımcı programını (lcov projesinin bir parçası) kullanabiliriz:
genhtml --branch-coverage --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
genhtml bu dosyalarda eksik kapsama ek açıklama eklemek için kaynak kodunu da okuyacaktır. Bunun çalışması için
genhtml ürününün bazel projesinin kökünde yürütülmesi beklenir.
Sonucu görüntülemek için herhangi bir web tarayıcısında
genhtml dizininde oluşturulan
index.html dosyasını açmanız yeterlidir.
genhtml aracı veya
lcov kapsam biçimi hakkında daha fazla yardım ve bilgi için lcov projesine bakın.
Uzaktan yürütme
Uzaktan test işleminde, şu anda dikkat edilmesi gereken birkaç nokta vardır:
- Rapor kombinasyonu işlemi henüz uzaktan çalıştırılamıyor. Bunun nedeni, Bazel'ın kapsam çıkış dosyalarını grafiğinin bir parçası olarak kabul etmemesi (bu soruna bakın) ve dolayısıyla, bunları kombinasyon işlemine giriş olarak doğru bir şekilde işleyememesidir. Bu sorunu çözmek için
--strategy=CoverageReport=localaracını kullanın.
- Not: Bazel, stratejileri çözme biçimi nedeniyle Bazel
local,remoteözelliğini kullanacak şekilde ayarlanmışsa
--strategy=CoverageReport=local,remotegibi bir değer belirtmeniz gerekebilir.
- Not: Bazel, stratejileri çözme biçimi nedeniyle Bazel
--remote_download_minimalve benzer işaretler, öncekinin son sonucu olarak da kullanılamaz.
- Testler daha önce önbelleğe alınmışsa Bazel şu anda kapsam bilgileri oluşturamamaktadır. Bu sorunu çözmek için
--nocache_test_results, özellikle kapsam çalıştırmalar için ayarlanabilir ancak bu durum test süreleri açısından ağır bir maliyete neden olabilir.
--experimental_split_coverage_postprocessingve
--experimental_fetch_all_coverage_outputs
- Kapsam genellikle test işleminin bir parçası olarak çalıştırılır. Bu nedenle varsayılan olarak, tüm kapsamın uzaktan yürütmenin çıktıları olarak alınmasını sağlamıyoruz. Bu işaretler, varsayılanı geçersiz kılar ve kapsam verilerini alır. Daha fazla bilgi için bu sorunu inceleyin.
Dile özgü yapılandırma
Java
Java, varsayılan yapılandırmayla birlikte çalışmalıdır. Uzaktan çalışma için gerekli her türlü birim arasında Birim aracı zincirleri de bulunur. Buna JUnit de dahildir.
Python
Python'da kapsam desteğini etkinleştirmek için gereken ek adımlar için
rules_python kapsam dokümanlarına göz atın.