Bazel, coverage
ile test edilebilen depolarda kod kapsamı raporları oluşturmak için bir alt komut bazel coverage
içerir. Çeşitli dil ekosistemlerinin kendine özgü özellikleri nedeniyle, bu özelliği belirli bir projede kullanmak her zaman kolay olmayabilir.
Bu sayfada, kapsam raporları oluşturma ve görüntüleme ile ilgili genel süreç açıklanmaktadır. Ayrıca, yapılandırması iyi bilinen diller için dile özel bazı notlar da yer almaktadır. Bu belgeyi en iyi şekilde okumak için önce genel bölümü, ardından da belirli bir dilin şartlarını okuyun. Ayrıca, bazı ek hususların dikkate alınmasını gerektiren uzaktan yürütme bölümüne de dikkat edin.
Çok sayıda özelleştirme yapılabilir ancak bu belgede, şu anda en iyi desteklenen yöntem olan lcov
raporları oluşturma ve kullanma konusu ele alınmaktadır.
Kapsam raporu oluşturma
Hazırlık
Kapsam raporları oluşturmayla ilgili temel iş akışı için aşağıdakiler gerekir:
- Test hedefleri içeren temel bir depo
- Dile özgü kod kapsamı araçlarının yüklü olduğu bir araç zinciri
- Doğru bir "enstrümantasyon" yapılandırması
İlk iki yöntem dile özgüdür ve genellikle basittir ancak son yöntem karmaşık projelerde daha zor olabilir.
Bu durumda "enstrümantasyon", belirli bir hedef için kullanılan kapsam araçlarını ifade eder. Bazel, enstrümentasyonun etkin olduğu test edilen hedefler için bir filtre belirten --instrumentation_filter
işaretini kullanarak bu işlevin belirli bir dosya alt kümesi için etkinleştirilmesine olanak tanır. Testler için enstrümantasyonu etkinleştirmek üzere
--instrument_test_targets
işareti gereklidir.
Bazel, varsayılan olarak hedef paketlerle eşleşmeye çalışır ve ilgili filtreyi INFO
mesajı olarak yazdırır.
Koşu kapsamı
Kapsam raporu oluşturmak için bazel coverage
--combined_report=lcov
[target]
simgesini kullanın. Bu komut, hedef için testleri çalıştırarak her dosya için lcov biçiminde kapsam raporları oluşturur.
İşlem tamamlandığında Bazel, oluşturulan tüm kapsam dosyalarını toplayan ve bunları tek bir dosyada birleştiren bir işlem çalıştırır. Bu dosya daha sonra $(bazel info
output_path)/_coverage/_coverage_report.dat
altında oluşturulur.
Testler başarısız olursa da kapsam raporları oluşturulur. Ancak bu durumun başarısız testler için geçerli olmadığını, yalnızca başarılı testlerin raporlandığını unutmayın.
Haber yayınını görüntüleme
Kapsam raporu yalnızca insanlar tarafından okunamayan lcov
biçiminde oluşturulur. Bunun ardından, bir web tarayıcısında görüntülenebilecek 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
'nın, bu dosyalardaki eksik kapsamı açıklama eklemek için kaynak kodu da okuduğunu unutmayın. Bu işlemin çalışması için genhtml
komutunun Bazel projesinin kök dizininde yürütülmesi gerekir.
Sonucu görüntülemek için index.html
dizininde oluşturulan genhtml
dosyasını herhangi bir web tarayıcısında açmanız yeterlidir.
genhtml
aracı veya lcov
kapsam biçimi hakkında daha fazla yardım ve bilgi için lcov projesini inceleyin.
Uzaktan yürütme
Uzaktan test yürütme ile ilgili şu anda birkaç uyarı bulunmaktadır:
- Rapor birleştirme işlemi henüz uzaktan çalıştırılamaz. Bunun nedeni, Bazel'ın kapsama alanı çıkış dosyalarını grafiğinin bir parçası olarak değerlendirmemesi (bu soruna bakın) ve bu nedenle bunları birleştirme işlemine giriş olarak doğru şekilde işlememesidir. Bu sorunu gidermek için
--strategy=CoverageReport=local
kullanın.- Not: Bazel, stratejileri çözümleme şekli nedeniyle
local,remote
'yi deneyecek şekilde ayarlanmışsa bunun yerine--strategy=CoverageReport=local,remote
gibi bir değer belirtmeniz gerekebilir.
- Not: Bazel, stratejileri çözümleme şekli nedeniyle
--remote_download_minimal
ve benzeri işaretler de yukarıdaki durum nedeniyle kullanılamaz.- Bazel, testler daha önce önbelleğe alınmışsa şu anda kapsam bilgisi oluşturamaz. Bu sorunu gidermek için,
--nocache_test_results
, kapsama çalıştırmaları için özel olarak ayarlanabilir. Ancak bu, test süreleri açısından ağır bir maliyete neden olur. --experimental_split_coverage_postprocessing
ve--experimental_fetch_all_coverage_outputs
- Genellikle kapsam, test işlemi kapsamında çalıştırılır. Bu nedenle, varsayılan olarak uzaktan yürütmenin çıkışları olarak tüm kapsamı geri almayız. Bu işaretler varsayılanı geçersiz kılar ve kapsam verilerini alır. Daha fazla bilgi için bu soruna göz atın.
Dile özgü yapılandırma
Java
Java, varsayılan yapılandırmayla kullanıma hazır olarak çalışmalıdır. Bazel araç zincirleri, JUnit dahil olmak üzere uzaktan yürütme için gereken her şeyi içerir.
Python
Python'da kapsam desteğini etkinleştirmek için gereken ek adımlar hakkında bilgi edinmek üzere rules_python
kapsam belgelerine göz atın.