Bazel ile kod kapsamı

Sorun bildirin Kaynağı göster

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=local aracını kullanın.
    • Not: Bazel, stratejileri çözme biçimi nedeniyle Bazel local,remote özelliğini kullanacak şekilde ayarlanmışsa --strategy=CoverageReport=local,remote gibi bir değer belirtmeniz gerekebilir.
  • --remote_download_minimal ve 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_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ı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.