Bazel, bazel coverage
ile test edilebilen depolar için kod kapsamı raporları oluşturmak üzere coverage
alt komutuna sahiptir. Çeşitli dil ekosistemlerinin kendine özgü özellikleri nedeniyle, bu işlemi belirli bir projede gerçekleştirmek her zaman kolay değildir.
Bu sayfada, kapsam raporları oluşturma ve görüntülemeyle ilgili genel süreç açıklanmakta, ayrıca yapılandırması iyi bilinen diller için dile özgü bazı notlar da yer almaktadır. Bu makaleyi okumanın en iyi yolu, önce genel bölümü, ardından belirli bir dil için gereklilikler hakkındaki bölümü okumaktır. Ayrıca, bazı ek hususları dikkate almanız gereken uzak yürütme bölümüne de göz atın.
Çok fazla özelleştirme yapılabilmesine rağmen bu dokümanda, şu anda en iyi desteklenen rota olan lcov
raporlarının oluşturulması ve kullanılması ele alınmaktadır.
Kapsam raporu oluşturma
Hazırlık
Kapsam raporları oluşturmaya ilişkin temel iş akışı şunları gerektirir:
- 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 "araç" yapılandırması
İlk ikisi dile özgüdür ve çoğunlukla basittir. Ancak sonuncusu karmaşık projeler için daha zor olabilir.
Bu durumda "donanım", belirli bir hedef için kullanılan kapsam araçlarını ifade eder. Bazel, bu özelliği belirli bir dosya alt kümesi için etkinleştirmenize olanak tanır. Bunun için --instrumentation_filter
işaretçisini kullanır. Bu işaretçi, enstrümantasyon etkinken test edilen hedefler için bir filtre belirtir. Testler için enstrümantasyonu etkinleştirmek üzere --instrument_test_targets
işareti gereklidir.
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]
simgesini kullanın. Bu işlem, 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 tek bir dosyada birleştiren bir işlem yürütür. Bu dosya daha sonra $(bazel info
output_path)/_coverage/_coverage_report.dat
altında oluşturulur.
Testler başarısız olursa kapsam raporları da oluşturulur. Ancak bu, başarısız testler için geçerli değildir. Yalnızca başarılı testler raporlanır.
Kapsamı görüntüleme
Kapsam raporu yalnızca insanlar tarafından okunamayan lcov
biçiminde çıktı olarak verilir. Bu bilgilerden, 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 --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
genhtml
'ün, bu dosyalarda eksik kapsamı açıklamak için kaynak kodu da okuduğunu unutmayın. Bunun işe yaraması için genhtml
'ün bazel projesinin kökünde yürütülmesi gerekir.
Sonucu görüntülemek için genhtml
dizininde oluşturulan index.html
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 projesine göz atın.
Uzaktan yürütme
Uzaktan test yürütme özelliğinin şu anda birkaç sınırlaması vardır:
- Rapor kombinasyonu işlemi henüz uzaktan çalıştırılamaz. Bunun nedeni, Bazel'in kapsam çıkış dosyalarını grafiğinin bir parçası olarak değerlendirmemesidir (bu soruna bakın). Bu nedenle, bu dosyaları birleştirme işleminin girişleri olarak doğru şekilde işleyemez. Bu sorunu çözmek için
--strategy=CoverageReport=local
uygulamasını kullanın.- Not: Bazel, stratejileri çözme şekli nedeniyle
local,remote
'ü deneyecek şekilde ayarlanmışsa bunun yerine--strategy=CoverageReport=local,remote
gibi bir değer belirtmeniz gerekebilir.
- Not: Bazel, stratejileri çözme şekli nedeniyle
--remote_download_minimal
ve benzer işaretler de bu nedenle kullanılamaz.- Testler önceden önbelleğe alınmışsa Bazel şu anda kapsam bilgileri oluşturamaz. Bu sorunu çözmek için
--nocache_test_results
, test süreleri açısından yüksek bir maliyete sahip olsa da kapsam çalıştırmaları için özel olarak ayarlanabilir. --experimental_split_coverage_postprocessing
ve--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ı uzaktan yürütmenin çıktıları olarak geri almayız. Bu işaretler varsayılan ayarı geçersiz kılar ve kapsam verilerini alır. Daha fazla bilgi için bu sayfada yer alan makaleyi inceleyin.
Dile özel yapılandırma
Java
Java, varsayılan yapılandırmayla kullanıma hazır olarak çalışı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 için rules_python
kapsam belgelerine bakın.