Code Coverage für Pull Requests

Azure DevOps Services

Die Code Coverage ist eine wichtige Qualitätsmetrik und hilft Ihnen dabei, den Prozentsatz des getesteten Projektcodes zu messen. Um sicherzustellen, dass sich die Qualität Ihres Projekts im Laufe der Zeit verbessert (oder zumindest nicht zurückgeführt wird), muss neuer Code, der in das System eingefügt wird, gut getestet werden. Wenn Entwickler Pull Requests auslösen, hilft das Wissen, ob ihre Änderungen von Tests abgedeckt werden, alle Testlöcher zu schließen, bevor die Änderungen in den Zielbranch zusammengeführt werden. Repositorybesitzer*innen sollten auch Richtlinien festlegen, um das Zusammenführen großer nicht getesteter Änderungen zu verhindern.

Vollständige Abdeckung, Diff-Abdeckung

Die vollständige Abdeckung ist, wenn die Abdeckung für die gesamte Codebasis eines Projekts gemessen wird. Im Kontext von Pull Requests konzentrieren sich Entwickler*innen jedoch auf die Änderungen, die sie vornehmen, und möchten wissen, ob die spezifischen Codezeilen, die sie hinzugefügt oder geändert haben, abgedeckt werden. Diese Art der Abdeckung ist diff Abdeckung.

Voraussetzungen

Um Abdeckungsmetriken für einen Pull Request zu erhalten, konfigurieren Sie zunächst eine Pipeline, die Pull Requests überprüft. Konfigurieren Sie in dieser Pipeline das Testtool, das Sie verwenden, um Code Coverage-Metriken zu sammeln. Die Abdeckungsergebnisse müssen dann für die Berichterstellung auf dem Server veröffentlicht werden.

Weitere Informationen zum Sammeln und Veröffentlichen von Code Coverage-Ergebnissen für die Sprache Ihrer Wahl finden Sie im Abschnitt Ökosysteme. Sammeln und veröffentlichen Sie beispielsweise Code Coverage für .NET Core-Apps.

Hinweis

Während Sie Code Coverage-Ergebnisse für viele verschiedene Sprachen mit Azure Pipelines sammeln und veröffentlichen können, ist das in diesem Dokument beschriebene Feature Code Coverage für Pull Requests derzeit nur für .NET- und .NET Core-Projekte mit dem Code Coverage-Ergebnisformat für Visual Studio (Dateierweiterung .coverage) verfügbar. Die Unterstützung für andere Sprachen und Abdeckungsformate wird in zukünftigen Meilensteinen hinzugefügt.

Abdeckungsstatus, Details und Indikatoren

Nachdem Sie eine Pipeline konfiguriert haben, die Code Coverage sammelt und veröffentlicht, sendet sie einen Code Coverage-Status, wenn ein Pull Request ausgelöst wird. Standardmäßig überprüft der Server, ob mindestens 70 % der geänderten Zeilen durch Tests abgedeckt werden. Das Schwellenwertziel für die Diff-Abdeckung kann in einen Wert Ihrer Wahl geändert werden. Weitere Informationen hierzu finden Sie im Abschnitt „Einstellungskonfiguration“ weiter unten.

Screenshot der Überprüfung des Abdeckungsstatus

Die Statusüberprüfung wertet den Diff-Abdeckungswert für alle Codedateien im Pull Request aus. Wenn Sie den Diff-Abdeckungswert in Prozent (%) für die einzelnen Dateien anzeigen möchten, können Sie Details wie im Konfigurationsabschnitt erwähnt aktivieren. Das Aktivieren von Details zeigt Details als Kommentar im Pull Request an.

Screenshot mit Kommentaren zu Abdeckungsdetails

In der geänderten Dateiansicht eines Pull Requests werden geänderte Zeilen auch mit Abdeckungsindikatoren kommentiert, um darauf hinzuweisen, ob diese Zeilen abgedeckt sind.

Screenshot mit Abdeckungsindikatoren

Hinweis

Sie können zwar Code aus einer Vielzahl von Versionskontrollsystemen erstellen, die von Azure Pipelines unterstützt werden, jedoch ist das in dieser Dokumentation erläuterte Feature Code Coverage für Pull Requests derzeit nur für Azure Repos verfügbar.

Konfigurieren von Abdeckungseinstellungen

Wenn Sie die Standardeinstellungen der Code Coverage für Pull Requests ändern möchten, müssen Sie eine YAML-Konfigurationsdatei namens azurepipelines-coverage.yml im Stammverzeichnis Ihres Repositorys einfügen. Legen Sie die gewünschten Werte in dieser Datei fest, und sie wird bei der nächsten Ausführung der Pipeline automatisch verwendet.

Die Einstellungen, die geändert werden können, sind folgende:

Einstellung Beschreibung Standard Zulässige Werte
status Gibt an, ob die Statusüberprüfung der Code Coverage für Pull Requests veröffentlicht werden soll.
Wenn Sie diese Option deaktivieren, werden keine Abdeckungsüberprüfungen bereitgestellt, und Anmerkungen zur Abdeckung werden nicht in der Ansicht zu geänderten Dateien angezeigt.
on on, off
target Der Zielschwellenwert für die Diff-Abdeckung muss erfüllt werden, damit ein erfolgreicher Abdeckungsstatus bereitgestellt wird. 70 % Gewünschte Anzahl in %
comments Gibt an, ob ein Kommentar mit Abdeckungsdetails für jede Codedatei im Pull Request bereitgestellt werden soll aus on, off

Beispielkonfiguration:

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

Weitere Beispiele mit Details finden Sie im YAML-Beispielrepository zur Code Coverage.

Hinweis

Die Abdeckungsindikatoren werden in der Ansicht „Geänderte Dateien“ angezeigt, unabhängig davon, ob die Details der Pull Request-Kommentare aktiviert sind.

Tipp

Die YAML-Abdeckungseinstellungen unterscheiden sich von einer YAML-Pipeline. Dies liegt daran, dass die Abdeckungseinstellungen für Ihr Repository gelten und unabhängig davon verwendet werden, welche Pipeline Ihren Code erstellt. Diese Trennung bedeutet auch, dass Sie bei Verwendung der klassischen Buildpipelines mit einem Designer die Statusüberprüfung der Code Coverage für Pull Requests erhalten.

Schützen eines Branchs mithilfe einer Code Coverage-Richtlinie

Die Statusüberprüfung der Code Coverage für Pull Requests ist nur ein Vorschlag für Entwickler*innen und verhindert nicht, dass Pull Requests mit geringer Code Coverage im Zielbranch zusammengeführt werden. Wenn Sie ein Repository verwalten und verhindern möchten, dass Entwickler*innen Änderungen zusammenführen, die keinen Abdeckungsschwellenwert erfüllen, müssen Sie eine Branchrichtlinie mit der Statusüberprüfung der Abdeckung konfigurieren.

Tipp

Der von einer Pipeline bereitgestellte Code Coverage-Staus folgt der Namenskonvention {name-of-your-pipeline/codecoverage}.

Hinweis

Branchrichtlinien in Azure Repos (auch optionale Richtlinien) verhindern, dass Pull Requests automatisch abgeschlossen werden, wenn sie fehlerhaft sind. Dieses Verhalten ist nicht spezifisch für die Code Coverage-Richtlinie.

Ab September 2023 wird die Code Coverage-Richtlinie nicht mehr auf Fehler überschrieben, wenn der Build fehlschlägt. Dieses Feature wird für alle Kunden aktiviert..

Häufig gestellte Fragen

Welche Abdeckungstools und Ergebnisformate können zum Überprüfen der Code Coverage in Pull Requests verwendet werden?

Die Funktion der Code Coverage für Pull Requests ist derzeit nur für Code Coverage-Formate für Visual Studio (.coverage) verfügbar. Diese kann verwendet werden, wenn Sie die Code Coverage mithilfe der Visual Studio-Testaufgabe, des Testverbs der .NET Core-Aufgabe und der TRX-Option der Aufgabe zum Veröffentlichen von Testergebnissen veröffentlichen. Unterstützung für andere Abdeckungstools und Ergebnisformate werden in zukünftigen Meilensteinen hinzugefügt.

Wird die Abdeckung pipelineübergreifend zusammengeführt, wenn beim Auslösen eines Pull Requests mehrere Pipelines ausgelöst werden?

Wenn mehrere Pipelines ausgelöst werden, wenn ein Pull Request ausgelöst wird, wird die Code Coverage nicht zusammengeführt. Die Funktion ist derzeit für eine einzelne Pipeline konzipiert, die Code Coverage für Pull Requests sammelt und veröffentlicht. Wenn Sie Abdeckungsdaten für Pipelines pipelineübergreifend zusammenführen müssen, senden Sie eine Featureanfrage an die Entwicklercommunity.

Hilfe und Support