Bazel, kod kapsamı oluşturmak için bir coverage
alt komutu içerir
bazel coverage
ile test edilebilen kod depolarıyla ilgili raporlar içerir. Teslim tarihi
birbirinden farklı dil ekosistemlerine göre değişse de,
bu işi yapmak her zaman sıradan bir iş değil.
Bu sayfada, oluşturma ve görüntülemeyle ilgili genel süreç ve ayrıca haberler ve öneriler için dile özgü bazı notlar iyi bilinen yapılandırmalar olabilir. Baştan okuması daha iyi genel bölümü okumanızı ve ardından belirli bir dile ilişkin şartları okuyun. Ayrıca uzaktan yürütme bölümü, göz atabilirsiniz.
Birçok özelleştirme mümkün olsa da bu belgede
lcov
raporlarının oluşturulması ve kullanılması,
en iyi desteklenen rotadır.
Kapsam raporu oluşturma
Hazırlık
Kapsam raporları oluşturmaya ilişkin temel iş akışı, takip etmek için:
- 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ırma
İlk ikisi, dile özgüdür ve çoğunlukla basittir. karmaşık projelerde ikincisi daha zor olabilir.
"Enstrümantasyon" Buradaki kastettiğimiz “Kapsam araçları”
belirli bir hedef için kullanılır. Bazel, bir
belirli dosya alt kümelerini
--instrumentation_filter
işareti ile test edilen hedefler için bir filtre belirtir.
araçlar etkinleştirildi. Araçları testlerde etkinleştirmek için
--instrument_test_targets
işareti gerekli.
Varsayılan olarak, bazel hedef paketleri eşleştirmeye çalışır ve
INFO
mesajı olarak filtre uygulayabilirsiniz.
Geçerli yayın
Kapsam raporu oluşturmak için bazel coverage
--combined_report=lcov
[target]
işlevini kullanın. Bu komut,
lcov biçiminde kapsam raporları oluşturarak hedef için testleri
kullanabilirsiniz.
İşlem tamamlandığında Bazel, üretilen tüm öğeleri toplayan
ve bunları tek bir kaynakta birleştirir. Bu işlem,
$(bazel info
output_path)/_coverage/_coverage_report.dat
altında oluşturulmuştur.
Testler başarısız olduğunda kapsam raporları da oluşturulur, ancak bu, başarısız olan testleri kapsamaz. Yalnızca geçilen testler bildiriliyor.
Kapsamı görüntüleme
Kapsam raporunun çıktısı yalnızca insanlar tarafından okunamayan lcov
şeklindedir
biçimindedir. Bundan, genhtml
yardımcı programını (icov
projesi) kullanarak web'de görüntülenebilecek bir rapor oluşturun
tarayıcı:
genhtml --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
genhtml
işlevinin eksik olanları belirtmek için kaynak kodu da okuduğunu unutmayın.
bu dosyalarda yer alır. Bunun işe yarayabilmesi için
genhtml
, bazel projesinin kökünde yürütülür.
Sonucu görüntülemek için şu konumda oluşturulan index.html
dosyasını açın:
Herhangi bir web tarayıcısında genhtml
dizini.
genhtml
aracı veya
lcov
kapsam biçimi. lcov projesini inceleyin.
Uzaktan yürütme
Uzaktan test yürütme ile çalıştırmanın şu anda birkaç uyarı vardır:
- Rapor kombinasyonu işlemi henüz uzaktan çalıştırılamaz. Bu
çünkü Bazel, kapsam çıkış dosyalarını
(buradaki soruna bakın) ve dolayısıyla
bunları kombinasyon işlemine girdi olarak doğru bir şekilde işlememesi gerekir. Alıcı:
sorunu çözmek için
--strategy=CoverageReport=local
kullanın.- Not:
Bazel ayarlanmışsa
--strategy=CoverageReport=local,remote
local,remote
, Bazel'in stratejileri çözme şekli nedeniyle denenebilir.
- Not:
Bazel ayarlanmışsa
--remote_download_minimal
ve benzer işaretler de kullanılamaz bunların bir sonucu olarak ortaya çıkabiliyor.- Testler başarısız olursa Bazel şu anda kapsam bilgileri oluşturamayacak
önceden önbelleğe alınmış
olduğundan emin olun. Bu sorunu çözmek için
--nocache_test_results
özellikle kapsam çalıştırmaları için ayarlanabilir. Ancak test süresi açısından yüksek bir maliyete yol açacaktır. --experimental_split_coverage_postprocessing
ve--experimental_fetch_all_coverage_outputs
- Kapsam genellikle test işleminin bir parçası olarak çalıştırılır. uzaktan kumandanın çıkışı olarak tüm kapsamı geri almayız. varsayılan olarak yürütülür. Bu flag'ler, varsayılan değeri geçersiz kılar ve kapsam verileridir. Daha fazla bilgi için bu soruna bakın bolca fırsat sunuyor.
Dile özel yapılandırma
Java
Java, varsayılan yapılandırmayla kullanıma hazır bir şekilde çalışmalıdır. İlgili içeriği oluşturmak için kullanılan bazel araç zincirleri, JUnit de dahil olmak üzere uzaktan yürütme
Python
rules_python
kapsam belgelerini inceleyin
Python'da kapsam desteğini etkinleştirmek için gereken ek adımlara göz atın.