Azure Pipelines'da kod kapsamı sonuçlarını gözden geçirme ve yapılandırma

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Kod kapsamı, projenizin gerçekten test edilen kodunun oranını (örneğin birim testlerine göre) belirlemenize yardımcı olur. Kod değişikliklerine olan güveninizi artırmak ve hatalara karşı etkili bir şekilde koruma sağlamak için testlerinizin kodunuzun büyük bir kısmını kullanması veya kapsaması gerekir.

Kod kapsamı sonuçlarını gözden geçirirken, testlerin kapsamadığını kod yollarını tanımlayabilirsiniz. Bu bilgiler, test borcunu azaltarak test kapsamını zaman içinde geliştirmenize yardımcı olur.

Bu makalede, Azure Pipelines'da kod kapsamını görüntüleme, yapılandırma ve sorun giderme işlemleri gösterilmektedir. Çekme istekleri için fark kapsama oranını ayarlamayı, kapsam politikalarını yapılandırmayı ve yaygın sorunları çözmeyi öğreneceksiniz.

Uyarı

Azure Pipelines'ın desteklediği çeşitli sürüm denetim sistemlerinden kod derleyebilirsiniz ancak bu makalede açıklanan çekme istekleri için kod kapsamı özelliği şu anda yalnızca Azure Repos'ta kullanılabilir.

Desteklenen biçimler, görevler ve yapıtlar

Desteklenen biçimler

Azure Pipelines, Kod Kapsamı Sonuçlarını Yayımla v2 görevi aracılığıyla kapsam sonuçlarını yayımlayabilir. Görev sonuçları 2 farklı görünümde görüntüleyebilir:

  • Cobertura, jacoco, clover, gcov, pcov ve diğer xml biçimleri için kod kapsamı raporunun daha fazla ayrıntısını içeren bir HTML görünümü oluşturulur ve müşterilerin çoğu tarafından tercih edilir.
  • için .coverage/.cjson/.covx : HTML görünümünden daha az ayrıntı içeren tablosal görünüm oluşturur.

Araçlar ve sonuçlar

Derleme sırasında yayımlanan kod kapsamı yapıtlarını işlem hattı çalıştırma özetinin Özet sekmesinde görüntüleyebilirsiniz.

Manuel çalışma ve iki yayımlanmış öğe içeren Özet sekmesini gösteren ekran görüntüsü.

Ayrıca, Kod Kapsamı sekmesindeki kod kapsamı raporundan sonuçları gözden geçirebilirsiniz:

Özet, ölçüm ve kapsam içeren Kod Kapsamı sekmesinin içeriğini gösteren ekran görüntüsü.

  • Kod kapsamını Cobertura veya JaCoCo kapsam biçimlerini kullanarak yayımlarsanız, kod kapsamı yapıtı daha fazla analiz için çevrimdışı görüntüleyebileceğiniz bir .html dosya içerir. HTML raporu özetini gösteren ekran görüntüsü.
  • .NET ve .NET Core için derleme özetinde kod kapsamı kilometre taşını seçerek yapıtı indirme bağlantısına erişebilirsiniz.
  • Visual Studio Test , .NET ve .NET Core uygulamaları için kapsam toplayabilir. Visual Studio'da daha fazla analiz için indirebileceğiniz ve kullanabileceğiniz dosyalar üretir .coverage . Kod kapsamı sonuçlarını gösteren ekran görüntüsü.

Görevler

Kod Kapsamı Sonuçlarını Yayımlama, Azure Pipelines'da kod kapsamı sonuçlarını Cobertura veya JaCoCo formatında bir derleme tarafından üretilen şekilde yayımlar.

Visual Studio Test, .NET Core, Ant, Maven, Gulp, Grunt ve Gradle gibi yerleşik görevler, kod kapsamı verilerini işlem hattına yayımlama seçeneği sunar.

Docker ile ilgili dikkat edilmesi gerekenler

Docker kullanan uygulamalar için kapsayıcı içinde derlemeler ve testler çalıştırabilir ve kapsayıcı içinde kod kapsamı sonuçları oluşturabilirsiniz. Sonuçları işlem hattında yayımlamak için, sonuçta elde edilen yapıtları Kod Kapsamı Sonuçlarını Yayımla görevi için kullanılabilir hale getirin. Referans olarak, Docker için Bir Docker dosyasıyla sonuçları derleme, test etme ve yayımlama bölümündeki test sonuçlarını yayımlamak için benzer bir örneğe bakın.

Dikkat edilmesi gereken önemli hususlar

  • Çok aşamalı YAML işlem hattında kod kapsamı sonuçları yalnızca işlem hattının tamamı tamamlandıktan sonra kullanılabilir. Üretime dağıtmadan önce kod kapsamı sonuçlarını gözden geçirmek istiyorsanız derleme aşamasını kendi işlem hattına ayırmanız gerekebilir.
  • Birden çok test çalıştırmasından alınan kod kapsamı sonuçlarının birleştirilmesi şu anda yalnızca .NET ve .NET Core için kullanılabilir. Diğer biçimleri desteklemeye dair bir plan yoktur.

Tam kapsama ve fark kapsamı karşılaştırması

Tam kapsam , bir projenin kod tabanının tamamı için kapsamı ölçer. Çekme istekleri bağlamında geliştiriciler yaptıkları değişikliklere odaklanır ve ekledikleri veya değiştirdikleri belirli kod satırlarının ele alınıp alınmadığını öğrenmek ister. Bu tür bir kapsam, diff kapsama alanıdır.

Kapsam ayarları deponuza uygulandığından ve kodunuzu oluşturan işlem hattından bağımsız olarak kullanıldığından YAML kapsam ayarları YAML işlem hattından farklıdır. Bu ayrım, klasik tasarımcı tabanlı derleme işlem hatlarını kullanırsanız çekme istekleri için kod kapsamı durum denetimini almanız anlamına da gelir.

Kapsam göstergeleri, çekme isteği açıklama ayrıntılarının açık olup olmamasına bakılmaksızın değiştirilen dosyalar görünümünde görünür.

Fark kapsamını yapılandırma

Çekme istekleri için kod kapsamı deneyiminin varsayılan ayarlarını değiştirmek için, deponuzun köküne azurepipelines-coverage.yml adlı bir yapılandırma YAML dosyası ekleyin. Bu dosyada istenen değerleri ayarlayın; Azure DevOps, işlem hattı bir sonraki çalıştırıldığında bunları otomatik olarak kullanır.

Aşağıdaki ayarları değiştirebilirsiniz:

Yapılandırabileceğiniz ayarları gösteren ekran görüntüsü.

Örnek yapılandırma

coverage:  
  status:                    # Code coverage status will be posted to pull requests based on targets defined below. 
    comments: on             # Off by default. When on, details about coverage for each file changed will be posted as a pull request comment.  
    diff:                    # Diff coverage is code coverage only for the lines changed in a pull request. 
      target: 60%            # Set this to a desired percentage. Default is 70 percent 

Kod kapsamı YAML örnekleri deposunda ayrıntıları içeren daha fazla örnek bulabilirsiniz.

Kapsam durumu, ayrıntılar ve göstergeler

Kod kapsamını toplamak ve yayımlamak için bir işlem hattı ayarladığınızda, çekme isteği oluşturduğunuz zaman kod kapsamı durumunu yayımlar. Varsayılan olarak, sunucu testlerin en az 70% değişen satırı kapsadığını denetler. Fark kapsamı eşiği hedefini, daha önce bahsedilen hedef parametresini değiştirerek seçtiğiniz bir değerle değiştirebilirsiniz.

Kapsam durumu denetiminin başarısız olduğunu gösteren ekran görüntüsü.

Durum denetimi, çekme isteğindeki tüm dosyalar için fark kapsamını hesaplar. Her dosyanın yüzdesini görmek için önceki bölümde açıklandığı gibi Ayrıntılar'ı etkinleştirin. Sistem etkinleştirildiğinde, detayları çekme isteğine açıklama olarak yayınlar.

Fark kapsamı denetiminin başarısız olduğu sonucu gösteren ekran görüntüsü.

Bir pull isteğinin değiştirilen dosyalar görünümünde, değiştirilen satırlar ayrıca bu satırların kapsanıp kapsanmadığını göstermek için kapsam göstergeleriyle annotate edilir.

Çekme isteği satırı değişiklik kapsamı göstergelerini gösteren ekran görüntüsü.

Kod kapsamı ilkesiyle dal korumasını zorunlu kılma

Varsayılan olarak, pull request'ler üzerindeki kod kapsamı durumu kontrolü sadece bilgilendirme amaçlıdır; düşük kapsama sahip birleşmeleri engellemez. Değişikliklerin birleştirmeden önce en düşük kapsam eşiğini karşıladığından emin olmak için kapsam durumu denetimini kullanan bir dal ilkesi yapılandırın.

İşlem hattından gönderilen kod kapsamı durumu adlandırma kuralına uyar {name-of-your-pipeline/codecoverage}.

Uyarı

  • Azure Repos'taki dal politikaları (isteğe bağlı politikalar bile), başarısız olurlarsa pull request'lerin otomatik tamamlanmasını engeller. Bu davranış kod kapsamı ilkesine özgü değildir.
  • Derleme başarısız olduğunda kod kapsamı politikası Başarısız olarak değiştirilmez.

Sorun giderme rehberi

Kod Kapsamı sekmesinin kapsam görünümünde neden yinelenen DLL'ler görüyorum?

İşlem hattında hem .NET Core hem de .NET Framework kullanıldığında yinelenen DLL'ler görebilirsiniz. Her ikisi de kullanıldığında, aynı modül farklı yollardan geldiğinden tasarım gereği yinelenen DLL'ler beklenir.

Kod Kapsamı sekmesinde neden kapsam verileri yok?

Bu soruna çeşitli nedenler neden olabilir:

  • Test veya DLL yok: Dosyalar test veya DLL içermiyorsa kapsam değeri 0'dır. Azure DevOps, kapsam değeri 0 olduğunda kod kapsamı verilerini sekmede görüntülemez. Bunun yerine Kod Kapsamı sekmesinin altında neden kapsam verisi olmadığını açıklayan bir ileti gösterilir.

  • Boş kapsam XML'si: Kod Kapsamını Yayımla görevlerini kullandığınızda, giriş olarak sağlanan kapsam .xml herhangi bir bilgi içermiyorsa veya kapsanan sıfır satır içeriyorsa, sekmenin altında kapsam verileri görüntülenmez. Kapsam .xml dosyasının (giriş dosyası) neden boş olduğunu veya bilgi eksik olduğunu denetleyin.

  • Derleme hataları: Derleme başarısız olursa, kod kapsamı sekmesi uygun bir iletiyle birlikte görüntülenir.

  • VSTest görev yapılandırması: VSTest görevini kullandığınızda, kod kapsamı denetimini etkinleştirmezseniz veya Test filtresi alanında dosyaları test etmek için yanlış DLL'lerden veya yanlış yollardan bahsederseniz kapsam verileri görüntülenmez.

  • Derleme yapılandırma sorunları: Bazen birden çok derleme yapılandırma değeri vardır ve BuildFlavour veya BuildPlatform gibi tüm değerleri ayarlamazsınız. Kullanıcı arabirimi yalnızca belirli derleme yapılandırmalarının değerlerini gösterir. Bu nedenle diğer modüller eksiktir.

  • Büyük HTML dosyaları: Dosya 7 MB'tan büyükse .html , rapor Kod Kapsamı sekmesinde kullanılamaz. Geçici çözüm olarak Özet'teki yayımlanan yapıtlardan "Kod Kapsamı Report_*" yapıtını indirin.

  • Hata iletileri: Kod Kapsamı sekmesinde kullanıcıya özgü bir hatayla ilgili bir hata iletisi varsa, bu hata iletisini neyin tetiklediğini araştırın.

Kod Kapsamı Durum Denetimi hiçbir zaman tamamlanmazsa veya başarısız olursa ne yapmalıyım?

Kod kapsamı durum denetimini etkinleştirmek için, azurepipelines-coverage.yml dosyasını deponun köküne eklemeyi deneyin. Dosya adının tam olarak aynı kaldığından emin olun. İşte bir örnek:

coverage: 
  status: 
    comments: on 
    diff: 
      target: 50% 

Kapsam durumu denetimi başarısız olursa:

  1. Farklılık kapsam yüzdesini kontrol edin. Hedeften küçükse fark kapsamı yüzdesini artırmayı deneyin.
  2. Derleme herhangi bir nedenle başarısız olduysa, bu hata kod kapsamı durum denetiminin başarısız olmasına da neden olabilir.
  3. Kapsam dosyasını veya raporunu hangi görevin işlem hattında oluşturduğunu kontrol edin. Görevin kapsam raporunu veya dosyasını düzgün bir şekilde yükleyip yüklemediğini doğrulayın.
  4. Fark kapsamı açıklamalarının "Yürütülebilir değişiklik yok" veya "Kod kapsamı verisi bulunamadı" sözlerini gösterdiği durumlar, satırlar kaldırıldığından, boşluk girişlerinden veya açıklama eklemelerinden kaynaklanabilir. Bu durumlar yönetilemez değişikliklerdir ve önemli değildir, bu nedenle kod kapsamı bunları raporlamaz.

Bazı DLL'leri kod kapsamından nasıl hariç tutabilirim?

Dosyaları kod kapsamının dışında tutmak için ExcludeFromCodeCoverageAttribute Sınıfını kullanın.

Birden çok özet dosyasını birleştirerek kod kapsamı özetini uygun ayrıntılarla nasıl yayımlayebilirim?

Kod Kapsamını Yayımla V1 görevi, giriş olarak birden çok özet dosyayı desteklemez. Bunun yerine, birden çok dosya biçimlerini destekleyen Kod Kapsamını Yayımla V2 görevini kullanın.

Rapor Oluşturucu görevini kullanarak tüm .xml dosyaları birleştirebilir ve ardından oluşturulan XML yolunu Kod Kapsamını Yayımla görevine giriş olarak geçirebilirsiniz.

Kod kapsamı denetimini nasıl tetiklerim?

Dosyalar için .html kapsam durumu denetimleri desteklenmez. Kod kapsamı sonuçlarını denetlemek için Derleme Kalite Denetimleri görevini kullanın.

Kod Kapsamı sekmesindeki rapor yanlış sayılar içeriyor

Sekmede görüntülenen veriler kapsam dosyasından gelir. Kod kapsamı dosyasını oluşturmak için özel görevler kullanıyorsanız, dosyada DLL'lerin veya dosyaların eksik olup olmadığını denetleyin.

Kod kapsamı ilkesi takıldı; buna neden olan nedir?

Bu soruna çeşitli faktörler neden olabilir:

  • Yanlış dal ilkesi adı biçimi: İşlem hattı adının dal ilkesi adıyla eşleşip ek karakter içermediğini doğrulayın.

    İşlem hattı adıyla eşleştiğinden emin olmak için İlkeler sekmesinin ve vurgulanan dal politikası adının gösterildiği ekran görüntüsü.

  • PublishCodeCoverage V1'i kullanma: Kod kapsamı politikası sıkışıyor ve de açıklamalar oluşturulmuyor. Bunun yerine PublishCodeCoverage V2 görevini kullanın.

  • Çekme isteğinde çok fazla dosya var: Çekme isteğinde 100'den fazla dosya varsa, kapsam ilkesi takılır.

  • Birden çok kapsam ilkesi: Birden çok kapsam ilkesi yapılandırırsanız, bunlardan biri takılır. Yalnızca bir ilke yapılandırın ve diğer takılmış ilkeyi silin.

Test ekledikten sonra bile PR'lerim için 0% fark kapsamı görüyorum

Çekme isteğinde değiştirilmiş veya yeni kod satırlarını kapsayacak testler eklerseniz ve yine de fark kapsamı% 0 görüyorsanız:

  1. Yeni eklenen testlerin derlemenin bir parçası olarak çalıştığını doğrulayın.
  2. Testler çalışmazsa, yapılandırmayı derlemeye dahil etmek için doğrulayın ve güncelleştirin, çünkü testler çalışmazsa kapsam hesaplanamaz.

Kapsam raporunun yayımlandığını görsem bile PR'de fark kapsama alanı açıklamasını görmüyorum.

Bu soruna çeşitli faktörler neden olabilir:

  • Görev sürümü: Fark kapsamı açıklamaları yalnızca Kod Kapsamını Yayımla V2 ile desteklenir.
  • Yürütülebilir değişiklik bulunmuyor: Yürütülebilir kodda yapılan değişiklikler olan dosyalar için fark kapsamı açıklamaları oluşturulur. Çekme isteğinde yalnızca yapılandırma güncellemeleri varsa, Azure DevOps derleme sırasında çalıştırılan tüm testlere göre kod kapsamını gösterebilir, fakat hesaplanacak bir farklılık kapsamı olmayabilir.
  • Kapsam biçimi: İşlevsel kod değişiklikleri varsa ve açıklama oluşturulmuyorsa, işlem hattının bu makalenin başında belirtilen desteklenen biçimlerden birinde bir kapsam raporu oluşturduğunu doğrulayın.

Kod Kapsamı sekmesinde doğru HTML raporunu görmüyorum

Raporu oluştururken .html sorun olduğunda sistem basitleştirilmiş bir görünüme geri döner.

Kod Kapsamı sekmesini ve modüllerin listesini ve geri dönüş basitleştirilmiş görünümü olan kapsam grafiğinin görsel göstergesini gösteren ekran görüntüsü.

Çekme isteklerinde kod kapsamını doğrulamak için hangi kapsam araçları ve sonuç biçimleri kullanılabilir?

Şu anda, pull request'lerin kod kapsamını doğrulamak için yalnızca Visual Studio kod kapsamı (.coverage) biçimlerini kullanabilirsiniz. Visual Studio Test görevini, .NET Core görevinin test fiilini ve Test Sonuçlarını Yayımla görevinin TRX seçeneğini kullanarak kod kapsamını yayımlarsanız bu biçimi kullanın.

Çekme isteği gönderildiğinde birden çok işlem hattı tetiklenirse kapsam işlem hatları arasında birleştirilir mi?

Çekme isteği oluşturulduğunda birden fazla işlem hattı tetiklenirse, kod kapsamı birleştirilmez. Bu özellik şu anda çekme istekleri için kod kapsamını toplayan ve yayımlayan tek bir işlem hattı için tasarlanmıştır. Kapsam verilerini işlem hatları arasında birleştirmeniz gerekiyorsa, Geliştirici Topluluğu’na özellik isteği gönderin.