Beschleunigen von Tests mithilfe der Testauswirkungsanalyse (Test Impact Analysis, TIA)

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

Continuous Integration (CI) ist eine wichtige Praxis in der Branche. Integrationen sind häufig und werden mit einem automatisierten Build überprüft, der Regressionstests durchführt, um Integrationsfehler so schnell wie möglich zu erkennen. Mit zunehmender Größe und Ausgereiftheit der Codebasis wächst in der Regel jedoch auch die Sammlung an Regressionstests, was dazu führen kann, dass die Durchführung eines vollständigen Regressionstests mehrere Stunden dauert. Diese Tests verlangsamen die Frequenz von Integrationen und verfehlen letztendlich den Zweck der Continuous Integration.

Um eine CI-Pipeline zu erhalten, die schnell abgeschlossen wird, verlagern einige Teams die Ausführung ihrer zeitintensiveren Tests in eine separate Phase der Pipeline. Diese Aktion hebelt die Continuous Integration allerdings nur noch weiter aus.

Aktivieren Sie stattdessen die Testauswirkungsanalyse (Test Impact Analysis, TIA), wenn Sie die Aufgabe Visual Studio-Test in einer Buildpipeline verwenden. Die Testauswirkungsanalyse führt eine inkrementelle Validierung mit automatischer Testauswahl durch. Sie wählt automatisch nur die Teilmenge der Tests aus, die zum Überprüfen des committeten Codes erforderlich sind. Wenn ein bestimmter Codecommit bei der CI/CD-Pipeline eingeht, wählt die Testauswirkungsanalyse nur die relevanten Tests aus, die zum Überprüfen dieses Commits erforderlich sind. Dadurch wird der Testlauf schneller abgeschlossen, bei Fehlern werden Sie früher benachrichtigt, und da alles auf die relevanten Bereiche ausgerichtet ist, erfolgt auch die Analyse schneller.

Vergleich von Testzeiten bei Verwendung der Testauswirkungsanalyse

Die Testauswirkungsanalyse bietet Folgendes:

  • Robuster Testauswahlmechanismus: Er umfasst bereits vorhandene beeinträchtigte Tests, zuvor nicht erfolgreiche Tests und neu hinzugefügte Tests.
  • Sicheres Fallback: Bei Commits und Szenarien, die für die Testauswirkungsanalyse nicht verständlich sind, werden alle Tests durchgeführt. Die Testauswirkungsanalyse ist derzeit nur auf verwalteten Code und auf eine Topologie mit einem einzelnen Computer ausgerichtet. Wenn der Codecommit also beispielsweise Änderungen an HTML- oder CSS-Dateien enthält, kann er von der Analyse nicht beurteilt werden, und es werden alle Tests durchgeführt.
  • Konfigurierbare Außerkraftsetzungen: Sie können alle Tests mit einer konfigurierten Periodizität ausführen.

Beachten Sie jedoch die folgenden Einschränkungen, wenn Sie die Testauswirkungsanalyse mit Visual Studio 2015 verwenden:

  • Paralleles Ausführen von Tests: In diesem Fall werden Tests seriell ausgeführt.
  • Ausführen von Tests mit aktivierter Code Coverage: In diesem Fall werden keine Code Coverage-Daten gesammelt.

Unterstützte Szenarien für die Testauswirkungsanalyse

Die Testauswirkungsanalyse (TIA) wird in den folgenden Szenarien unterstützt:

  • TFS 2017 ab Update 1 sowie Azure Pipelines
  • Version 2.* der Aufgabe Visual Studio-Test in der Buildpipeline
  • Build vNext mit mehreren VSTest-Aufgaben
  • VS2015 Update 3 auf dem Build-Agent
  • Lokale und gehostete Build-Agents
  • CI und in PR-Workflows
  • Git-Repositorys, GitHub-Repositorys, andere Git-Repositorys und TFVC-Repositorys (einschließlich teilweise zugeordneter TFVC-Repositorys mit einer Problemumgehung)
  • IIS-Interaktionen (über REST- oder SOAP-APIs) unter Verwendung von HTTP- bzw. HTTPS-Protokollen
  • Automatisierte Tests
  • Topologie mit einem einzelnen Computer. Tests und App (GS) müssen auf dem gleichen Computer ausgeführt werden.
  • Verwalteter Code (beliebige .NET Framework-App, beliebiger .NET-Dienst)

Die Testauswirkungsanalyse (TIA) wird in den folgenden Szenarien nicht unterstützt:

  • Topologie mit mehreren Computern (bei der die zu testende App auf einem anderen Computer bereitgestellt ist)
  • Datengesteuerte Tests
  • Testadapterspezifische parallele Testausführung
  • .NET Core
  • UWP

Weitere Informationen zum Umfang der Testauswirkungsanalyse und zu den Anwendungen

Aktivieren der Testauswirkungsanalyse

Die Testauswirkungsanalyse wird durch die Version 2.* der Aufgabe Visual Studio-Test unterstützt. Wenn es sich bei Ihrer App um eine Anwendung mit einer einzelnen Ebene handelt, müssen Sie lediglich auf der Aufgabenbenutzeroberfläche das Kontrollkästchen Nur betroffene Tests ausführen aktivieren. Der Datensammler für die Testwirkung wird automatisch konfiguriert. Es sind keine weiteren Schritte erforderlich.

Aktivieren der Testauswirkungsanalyse auf der Benutzeroberfläche der Aufgabe „Visual Studio-Test“

Wenn Ihre Anwendung mit einem Dienst im Kontext von IIS interagiert, müssen Sie auch den Datensammler für die Testwirkung mithilfe einer Datei vom Typ .runsettings so konfigurieren, dass er im Kontext von IIS ausgeführt wird. Im folgenden Beispiel wird diese Konfiguration erstellt:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <DataCollectionRunSettings>
    <DataCollectors>
      <!-- This is the TestImpact data collector.-->
      <DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
        <Configuration>
          <!-- enable IIS data collection-->
          <InstrumentIIS>True</InstrumentIIS>
          <!-- file level data collection -->
          <ImpactLevel>file</ImpactLevel>
          <!-- any job agent related executable or any other service that the test is using needs to be profiled. -->
          <ServicesToInstrument>
            <Name>TeamFoundationSshService</Name>
          </ServicesToInstrument>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Anzeigen des Ergebnisses der Testauswirkungsanalyse

Die Testauswirkungsanalyse ist in die vorhandene Testberichterstattung sowohl auf der Zusammenfassungsebene als auch auf der Detailebene integriert – einschließlich Benachrichtigungs-E-Mails.

Berichtszusammenfassung beinhaltet TIA-Integration

Seite „Tests“ der Berichterstellung beinhaltet TIA-Integration

Weitere Informationen zur Integration von Testauswirkungsanalyse und Azure Pipelines

Verwalten des Verhaltens der Testauswirkungsanalyse

Sie können beeinflussen, ob Tests in einen Testlauf eingeschlossen oder ignoriert werden sollen:

  • Über die Benutzeroberfläche der VSTest-Aufgabe: Die Testauswirkungsanalyse kann so konfiguriert werden, dass alle Tests mit einer konfigurierten Periodizität durchgeführt werden. Es wird empfohlen, diese Option festzulegen, und sie ermöglicht die Steuerung der Testauswahl.
  • Durch Festlegen einer Buildvariablen: Durch Festlegen der Variablen DisableTestImpactAnalysis auf true können Sie die Testauswirkungsanalyse für einen bestimmten Build deaktivieren, selbst wenn sie zuvor in der VSTest-Aufgabe aktiviert wurde. Diese Außerkraftsetzung erzwingt die Durchführung aller Tests für diesen Build durch die Testauswirkungsanalyse. In nachfolgenden Builds kehrt die Testauswirkungsanalyse wieder zur optimierten Testauswahl zurück.

Wenn die Testauswirkungsanalyse einen Commit öffnet und auf einen unbekannten Dateityp trifft, werden alle Tests durchgeführt. Diese Aktion ist zwar aus Sicherheitsgründen gut, in bestimmten Fällen kann jedoch eine Optimierung dieses Verhaltens nützlich sein. Zum Beispiel:

  • Legen Sie die Variable TI_IncludePathFilters auf bestimmte Pfade fest, um nur diese Pfade in ein Repository einzuschließen, für das die Testauswirkungsanalyse angewendet werden soll. Diese Aktion ist hilfreich, wenn Teams ein freigegebenes Repository verwenden. Durch Festlegen dieser Variablen wird die Testauswirkungsanalyse für alle anderen Pfade deaktiviert, die nicht in der Einstellung enthalten sind.
  • Legen Sie die Variable TIA_IncludePathFilters fest, um Dateitypen anzugeben, die das Ergebnis von Tests nicht beeinflussen und bei denen Änderungen ignoriert werden sollen. Wenn beispielsweise Änderungen an CSPROJ-Dateien ignoriert werden sollen, legen Sie die Variable auf den folgenden Wert fest: !\*\*\\\*.csproj.

Verwenden Sie beim Festlegen von Variablen das Minimatch-Muster, und trennen Sie mehrere Elemente durch ein Semikolon.

So werten Sie aus, ob die Testauswirkungsanalyse die passenden Tests auswählt

  • Überprüfen Sie die Auswahl manuell. Entwickler*innen, die wissen, wie das getestete System und Tests konstruiert sind, können die Testauswahl mithilfe der Berichterstellungsfunktionen der Testauswirkungsanalyse manuell überprüfen.
  • Führen Sie von der Testauswirkungsanalyse ausgewählte Tests und anschließend alle Tests nacheinander aus. Verwenden Sie in einer Buildpipeline zwei Testaufgaben: eine, die nur betroffene Tests (T1) ausführt, und eine, die alle Tests ausführt (T2). Wenn T1 bestanden wird, überprüfen Sie, ob auch T2 bestanden wird. Sollte T1 einen fehlerhaften Test enthalten, überprüfen Sie, ob T2 die gleichen Fehler meldet.

Weitere Informationen zur erweiterten Konfiguration der Testauswirkungsanalyse

Bereitstellen benutzerdefinierter Abhängigkeitszuordnungen

Die Testauswirkungsanalyse verwendet Abhängigkeitszuordnungen im folgenden Format:

TestMethod1
  dependency1
  dependency2
TestMethod2
  dependency1
  dependency3

Die Testauswirkungsanalyse kann eine Abhängigkeitszuordnung für die Ausführung von verwaltetem Code generieren. Wenn sich solche Abhängigkeiten in .cs- und .vb-Dateien befinden, kann die Testauswirkungsanalyse automatisch auf Commits in solchen Dateien achten und dann Tests ausführen, bei denen diese Quelldateien in der Liste der Abhängigkeiten enthalten waren.

Sie können den Umfang der Testauswirkungsanalyse erweitern, indem Sie die Abhängigkeitszuordnung explizit als XML-Datei bereitstellen. So können Sie beispielsweise Code in anderen Programmiersprachen (beispielsweise JavaScript oder C++) oder ein Szenario unterstützen, in dem Tests und Produktcode auf verschiedenen Computern ausgeführt werden. Bei der Zuordnung kann es sich sogar um eine ungefähre Zuordnung handeln, und die Gruppe von Tests, die Sie ausführen möchten, kann in Form eines Testfallfilters angegeben werden, wie er normalerweise in den VSTest-Aufgabenparametern angegeben wird.

Die XML-Datei muss in Ihr Repository eingecheckt werden (in der Regel auf der Stammebene). Legen Sie dann die Buildvariable TIA.UserMapFile fest, um darauf zu zeigen. Heißt die Datei also beispielsweise TIAmap.xml, legen Sie die Variable auf $(System.DefaultWorkingDirectory)/TIAmap.xml fest.

Ein Beispiel für das XML-Dateiformat finden Sie unter Accelerated Continuous Testing with Test Impact Analysis – Part 4 (Beschleunigtes kontinuierliches Testen mit der Testauswirkungsanalyse – Teil 4).

Weitere Informationen

Hilfe und Support