Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Pokrycie kodu ułatwia określenie odsetka kodu projektu, który jest rzeczywiście testowany, na przykład przez testy jednostkowe. Aby zwiększyć pewność co do zmian kodu i skutecznie chronić przed usterkami, testy powinny wykonywać lub obejmować dużą część kodu.
Podczas przeglądania wyników pokrycia kodu można zidentyfikować ścieżki kodu, które testy nie obejmują. Te informacje pomagają poprawić pokrycie testowe z biegiem czasu poprzez zmniejszanie długu testowego.
W tym artykule pokazano, jak wyświetlać, konfigurować i rozwiązywać problemy z pokryciem kodu w usłudze Azure Pipelines. Dowiesz się, jak skonfigurować pokrycie różnic dla żądań ściągnięcia, skonfigurować zasady pokrycia i rozwiązać typowe problemy.
Uwaga / Notatka
Chociaż można tworzyć kod z różnych systemów kontroli wersji, które obsługuje usługa Azure Pipelines, pokrycie kodu dla żądań ściągnięcia omówionych w tym artykule jest obecnie dostępne tylko dla usługi Azure Repos.
Obsługiwane formaty, zadania i artefakty
Obsługiwane formaty
Azure Pipelines może publikować wyniki pokrycia za pomocą zadania Publish Code Coverage Results v2. Zadanie może wyświetlać wyniki w 2 różnych widokach:
- W przypadku formatów XML takich jak cobertura, jacoco, clover, gcov, pcov i innych, generowany jest widok HTML, który zawiera bardziej szczegółowe informacje o raporcie pokrycia kodu, preferowany przez większość klientów.
- For
.coverage/.cjson/.covx— generowany jest widok tabelaryczny zawierający mniej szczegółów niż widok HTML.
Artefakty i wyniki
Artefakty pokrycia kodu opublikowane podczas kompilacji można wyświetlić na karcie Podsumowanie w podsumowaniu przebiegu procesu potokowego.
Ponadto możesz przejrzeć wyniki raportu pokrycia kodu na karcie Pokrycie kodu :
- Jeśli publikujesz pokrycie kodu przy użyciu formatów pokrycia Cobertura lub JaCoCo, artefakt pokrycia kodu zawiera
.htmlplik, który można wyświetlić w trybie offline w celu dalszej analizy.
- W przypadku platform .NET i .NET Core możesz uzyskać dostęp do linku w celu pobrania artefaktu, wybierając punkt kontrolny pokrycia kodu w podsumowaniu kompilacji.
-
Test programu Visual Studio może zbierać pokrycie dla aplikacji .NET i .NET Core.
.coverageTworzy pliki, które można pobrać i używać do dalszej analizy w programie Visual Studio.
Tasks
Publikowanie wyników pokrycia kodu publikuje wyniki pokrycia kodu w usłudze Azure Pipelines, które zostały wygenerowane przez kompilację w formacie Cobertura lub JaCoCo.
Wbudowane zadania, takie jak Visual Studio Test, .NET Core, Ant, Maven, Gulp, Grunt i Gradle , zapewniają opcję publikowania danych pokrycia kodu w potoku.
Zagadnienia dotyczące platformy Docker
W przypadku aplikacji korzystających z platformy Docker można uruchamiać kompilacje i testy wewnątrz kontenera oraz generować wyniki pokrycia kodu w kontenerze. Aby opublikować wyniki w potoku, udostępnij wynikowe artefakty w zadaniu Publikuj wyniki pokrycia kodu. Aby uzyskać informacje ogólne, zobacz podobny przykład publikowania wyników testów w sekcji Kompilowanie, testowanie i publikowanie wyników za pomocą pliku platformy Docker dla platformy Docker.
Ważne uwagi
- W potoku YAML z wieloma etapami wyniki pokrycia kodu są dostępne tylko po zakończeniu całego procesu. Może być konieczne oddzielenie etapu kompilacji jako osobny potok, jeśli chcesz sprawdzić wyniki pokrycia kodu przed wdrożeniem do środowiska produkcyjnego.
- Scalanie wyników pokrycia kodu z wielu przebiegów testów działa obecnie tylko dla platform .NET i .NET Core. Nie ma planów obsługi innych formatów.
Pełne pokrycie i pokrycie różnic
Pełne pokrycie mierzy pokrycie całej bazy kodu projektu. W kontekście żądań ściągnięcia deweloperzy koncentrują się na zmianach, które tworzą i chcą wiedzieć, czy zostały omówione konkretne wiersze kodu, które dodali, czy zmienili. Ten typ pokrycia jest pokrycie różnicowe.
Ustawienia pokrycia YAML różnią się od potoku YAML, ponieważ ustawienia pokrycia mają zastosowanie do repozytorium i są używane niezależnie od tego, który potok kompiluje kod. Ta separacja oznacza również, że jeśli używasz klasycznych potoków budowania opartych na narzędziach projektowych, otrzymasz kontrolę pokrycia kodu dla żądań ściągnięcia kodu.
Wskaźniki pokrycia są wyświetlane w widoku zmienionych plików niezależnie od tego, czy szczegóły komentarza żądania ściągnięcia są włączone.
Konfigurowanie pokrycia różnicowego
Aby zmienić domyślne ustawienia środowiska pokrycia kodu dla żądań ściągnięcia, dołącz plik YAML konfiguracji o nazwie azurepipelines-coverage.yml w katalogu głównym repozytorium. Ustaw żądane parametry w tym pliku, a Azure DevOps będzie je używać automatycznie podczas następnego uruchomienia potoku.
Możesz zmienić następujące ustawienia:
Przykładowa konfiguracja
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
Możesz znaleźć więcej przykładów z szczegółami w repozytorium przykładów YAML pokrycia kodu.
Stan pokrycia, szczegóły i wskaźniki
Po skonfigurowaniu potoku do zbierania i publikowania pokrycia kodu, aktualizuje on status pokrycia kodu podczas tworzenia pull requesta. Domyślnie serwer sprawdza, czy testy obejmują co najmniej 70% zmienionych wierszy. Wartość docelową progu pokrycia różnic można zmienić na wybraną wartość, modyfikując wcześniej wymieniony parametr docelowy.
Sprawdzanie stanu oblicza zakres zmian dla wszystkich plików w żądaniu zmiany. Aby wyświetlić wartość procentową dla każdego pliku, włącz opcję Szczegóły zgodnie z opisem w poprzedniej sekcji. Po włączeniu system publikuje szczegóły jako komentarz do pull requesta.
W widoku zmienionych plików żądania ściągnięcia zmienione linie są również oznaczone wskaźnikami pokrycia, aby pokazać, czy te wiersze są objęte.
Wymuszanie ochrony gałęzi za pomocą zasad pokrycia kodu
Domyślnie sprawdzenie pokrycia kodu dla żądań pull request ma charakter doradczy — nie blokuje mergowania z niskim pokryciem. Aby zapewnić, że zmiany spełniają minimalny próg pokrycia przed scaleniem, skonfiguruj zasady gałęzi, które używają sprawdzania stanu pokrycia.
Stan pokrycia kodu opublikowany z pipeline'u jest zgodny z konwencją nazewnictwa {name-of-your-pipeline/codecoverage}.
Uwaga / Notatka
- Zasady gałęzi w usłudze Azure Repos (nawet opcjonalne zasady) uniemożliwiają automatyczne kończenie żądań ściągnięcia w przypadku niepowodzenia. To zachowanie nie jest specyficzne dla polityki pokrycia kodu.
- Zasady pokrycia kodu nie są zmieniane na status Niepowodzenie, jeśli kompilacja zakończy się niepowodzeniem.
Przewodnik rozwiązywania problemów
Dlaczego widzę zduplikowane biblioteki DLL w widoku pokrycia karty Pokrycie kodu?
W potoku mogą pojawić się zduplikowane biblioteki DLL, gdy w potoku są używane zarówno platformy .NET Core, jak i .NET Framework. Należy oczekiwać zduplikowanych bibliotek DLL, gdy używane są oba moduły, co jest zamierzone, ponieważ ten sam moduł pochodzi z różnych ścieżek.
Dlaczego na karcie Pokrycie kodu nie ma danych pokrycia?
Przyczyną tego problemu może być kilka przyczyn:
Brak testów ani bibliotek DLL: jeśli pliki nie zawierają testów ani bibliotek DLL, wartość pokrycia wynosi 0. Usługa Azure DevOps nie wyświetla danych pokrycia kodu na karcie, gdy wartość pokrycia wynosi 0. Zamiast tego zostanie wyświetlony komunikat na karcie Pokrycie kodu wyjaśniający, dlaczego nie ma danych pokrycia.
Pusty plik XML pokrycia: Jeśli używasz zadań Publikowania pokrycia kodu, a pokrycie
.xmlpodane jako dane wejściowe nie zawiera żadnych informacji lub nie obejmuje żadnych wierszy, żadne dane pokrycia nie zostaną wyświetlone na karcie. Sprawdź, dlaczego plik pokrycia.xml(plik wejściowy) jest pusty lub brakuje w nim informacji.Niepowodzenia kompilacji: jeśli kompilacja zakończy się niepowodzeniem, karta pokrycia kodu zostanie wyświetlona z odpowiednim komunikatem.
Konfiguracja zadania VSTest: Jeśli używasz zadania VSTest, nie włączysz sprawdzania pokrycia kodu lub wymienisz nieprawidłowe biblioteki DLL albo nieprawidłowe ścieżki do plików testowych w polu filtru testowego, dane pokrycia nie są wyświetlane.
Problemy z konfiguracją kompilacji: czasami istnieje wiele wartości konfiguracji kompilacji i nie ustawiasz wszystkich wartości, takich jak BuildFlavour lub BuildPlatform. W interfejsie użytkownika są wyświetlane tylko wartości określonych konfiguracji kompilacji, dlatego brakuje innych modułów.
Duże pliki HTML: jeśli
.htmlplik jest większy niż 7 MB, raport nie jest dostępny na karcie Pokrycie kodu. Aby obejść ten problem, pobierz artefakt "Pokrycie kodu Report_*" z opublikowanych artefaktów w podsumowaniu.Komunikaty o błędach: jeśli karta Pokrycie kodu zawiera komunikat o błędzie odnoszący się do problemu charakterystycznego dla użytkownika, sprawdź, co spowodowało jego wyświetlenie.
Co zrobić, jeśli sprawdzanie stanu pokrycia kodu nigdy nie zostanie zakończone lub zakończy się niepowodzeniem?
Aby włączyć sprawdzanie stanu pokrycia kodu, spróbuj dodać plik azurepipelines-coverage.yml w katalogu głównym repozytorium. Upewnij się, że nazwa pliku pozostaje dokładnie taka sama. Oto przykład:
coverage:
status:
comments: on
diff:
target: 50%
Jeśli sprawdzanie stanu pokrycia kończy się niepowodzeniem:
- Sprawdź wartość procentową pokrycia różnic. Jeśli jest mniejszy niż cel, spróbuj zwiększyć procent pokrycia różnic.
- Jeśli kompilacja nie powiodła się z jakiegokolwiek powodu, ten błąd może również spowodować niepowodzenie sprawdzania stanu pokrycia kodu.
- Sprawdź, które zadanie generuje plik pokrycia lub raport w pipeline'u. Sprawdź, czy zadanie poprawnie przesyła raport pokrycia lub plik.
- Przypadki, w których komentarze dotyczące pokrycia różnic wskazują "Brak zmian wykonywalnych" lub "Nie znaleziono danych pokrycia kodu", mogą wystąpić z powodu usuwania wierszy, wstawiania białych znaków lub dodawania komentarzy. Te przypadki to zmiany, których się nie wykonuje i nie są istotne, dlatego pokrycie kodu nie zgłasza ich.
Jak mogę wykluczyć niektóre biblioteki DLL z pokrycia kodu?
Aby wykluczyć pliki z pokrycia testami, użyj klasy ExcludeFromCodeCoverageAttribute.
Jak opublikować podsumowanie pokrycia kodu z odpowiednimi szczegółami poprzez scalanie wielu plików podsumowania?
Zadanie Publikowanie pokrycia kodu w wersji 1 nie obsługuje wielu plików podsumowań jako danych wejściowych. Zamiast tego użyj zadania Publikuj Pokrycie Kodu V2, które obsługuje wiele formatów plików.
Możesz również użyć zadania Generowanie raportów, aby scalić wszystkie pliki .xml, a następnie przekazać ścieżkę do wygenerowanego XML jako dane wejściowe do zadania Publikowanie pokrycia kodu.
Jak mogę wyzwolić sprawdzanie pokrycia kodu?
W przypadku .html plików kontrole stanu pokrycia nie są obsługiwane. Użyj zadania Kontrola jakości kompilacji, aby sprawdzić wyniki pokrycia kodu.
Raport na zakładce Pokrycie kodu zawiera nieprecyzyjne liczby
Dane wyświetlane na karcie pochodzą z pliku coverage. Jeśli używasz niestandardowych zadań do generowania pliku zakresu pokrycia kodu, sprawdź, czy w pliku nie brakuje jakichkolwiek bibliotek DLL lub plików.
Polityka pokrycia kodu utknęła — co to powoduje?
Przyczyną tego problemu może być kilka czynników:
Nieprawidłowy format nazwy zasad dla gałęzi: Sprawdź, czy nazwa pipeline'u jest zgodna z nazwą zasad dla gałęzi i nie zawiera dodatkowych znaków.
Zrzut ekranu przedstawiający kartę Polityki oraz wyróżnioną nazwę polityki gałęzi w celu potwierdzenia zgodności z nazwą potoku.
Korzystanie z funkcji PublishCodeCoverage w wersji 1: polityka pokrycia kodu blokuje się i komentarze nie są generowane. Zamiast tego użyj zadania PublishCodeCoverage w wersji 2.
Zbyt wiele plików w żądaniu ściągnięcia: jeśli żądanie ściągnięcia ma więcej niż 100 plików, zasady pokrycia zostaną zablokowane.
Wiele zasad pokrycia: jeśli skonfigurujesz wiele zasad pokrycia, jedna z nich zostanie zablokowana. Skonfiguruj tylko jedną zasadę i usuń pozostałe zablokowane zasady.
Widzę 0% pokrycia różnic w moich PRach, nawet po dodaniu testów.
Jeśli dodasz testy, aby objąć zmodyfikowane lub nowe linie kodu w PR, a mimo to nadal widzisz różnicę pokrycia na poziomie 0%:
- Sprawdź, czy nowo dodane testy są uruchamiane w ramach kompilacji.
- Jeśli testy nie są uruchamiane, sprawdź i zaktualizuj konfigurację, aby uwzględnić je w kompilacji, ponieważ nie można obliczyć pokrycia, jeśli testy nie zostaną uruchomione.
Nie widzę komentarza dotyczącego pokrycia różnicowego w pull request, mimo że widzę opublikowany raport pokrycia.
Przyczyną tego problemu może być kilka czynników:
- Wersja zadania: Komentarze dotyczące pokrycia różnicowego są obsługiwane tylko w przypadku funkcji Publikuj Pokrycie Kodu w wersji 2.
- Brak zmian wykonywalnych: Komentarze dotyczące pokrycia różnic są generowane dla plików ze zmianami kodu wykonywalnego. Jeśli pull request zawiera tylko aktualizacje konfiguracji, usługa Azure DevOps może wyświetlać pokrycie kodu na podstawie wszystkich testów uruchamianych podczas kompilacji, ale może nie być pokrycia różnicowego do obliczenia.
- Format pokrycia: jeśli istnieją funkcjonalne zmiany kodu, a komentarz się nie generuje, zweryfikuj, czy pipeline generuje raport pokrycia w jednym z obsługiwanych formatów wymienionych na początku niniejszego artykułu.
Na karcie Pokrycie kodu nie widzę odpowiedniego raportu HTML
Gdy występują problemy z generowaniem .html raportu, system wraca do uproszczonego widoku.
Które narzędzia pokrycia i formaty wyników mogą służyć do sprawdzania poprawności pokrycia kodu w żądaniach ściągnięcia?
Obecnie można używać tylko formatów pokrycia programu Visual Studio Code (.coverage), aby zweryfikować pokrycie kodu dla żądań ściągnięcia. Użyj tego formatu, jeśli publikujesz pokrycie kodu przy użyciu zadania testowego programu Visual Studio, polecenia testowego zadania .NET Core i opcji TRX zadania Publikuj wyniki testów.
Jeśli po zgłoszeniu pull requestu zostanie uruchomionych wiele potoków, czy pokrycie zostanie scalone pomiędzy potokami?
Jeśli po wywołaniu żądania ściągnięcia zostanie wyzwolonych wiele potoków, pokrycie kodu nie zostanie scalone. Ta funkcja jest obecnie zaprojektowana dla pojedynczego potoku, który zbiera i publikuje pokrycie kodu dla pull requestów. Jeśli musisz scalić dane pokrycia między potokami, zgłoś prośbę o dodanie funkcji w Społeczności Deweloperów.