Bazel ile kod kapsamı

Sorun bildir Kaynağı görüntüle Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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.
  • --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.