Delen via


Sneller testen met behulp van Test Impact Analysis (TIA)

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

Continue integratie (CI) is een belangrijke praktijk in de branche. Integraties worden regelmatig uitgevoerd en geverifieerd met een geautomatiseerde build die regressietests uitvoert om zo snel mogelijk integratiefouten te detecteren. Maar naarmate de codebasis groeit en volwassen wordt, neemt de regressietestsuite ook toe, in zoverre het uitvoeren van een volledige regressietest uren kan vereisen. Deze test vertraagt de frequentie van integraties en verslaat uiteindelijk het doel van continue integratie.

Als u een CI-pijplijn wilt hebben die snel wordt voltooid, stellen sommige teams de uitvoering van hun langerlopende tests uit tot een afzonderlijke fase in de pijplijn. Maar deze actie dient alleen om continue integratie verder te verslaan.

Schakel in plaats daarvan Test Impact Analysis (TIA) in wanneer u de Visual Studio Test-taak in een build-pijplijn gebruikt. TIA voert incrementele validatie uit door automatische testselectie. Er wordt automatisch alleen de subset van tests geselecteerd die nodig zijn om de code te valideren die wordt doorgevoerd. Voor een bepaalde codedoorvoering die de CI/CD-pijplijn invoert, selecteert en voert TIA alleen de relevante tests uit die nodig zijn om die doorvoering te valideren. Daarom wordt de testuitvoering sneller voltooid, als er een fout optreedt die u eerder ontvangt en omdat deze allemaal op relevantie is afgestemd, is de analyse ook sneller.

Vergelijking van testtijden bij gebruik van TIA

De impactanalyse van de test heeft:

  • Een robuust testselectiemechanisme. Het omvat bestaande betrokken tests, eerder mislukte tests en nieuw toegevoegde tests.
  • Veilige terugval. Voor doorvoeringen en scenario's die TIA niet begrijpt, valt het terug op het uitvoeren van alle tests. TIA is momenteel beperkt tot alleen beheerde code en één machinetopologie. Als de codedoorvoering bijvoorbeeld wijzigingen bevat in HTML- of CSS-bestanden, kan het niet redeneren om ze uit te voeren en terugvallen op het uitvoeren van alle tests.
  • Configureerbare onderdrukkingen. U kunt alle tests uitvoeren op een geconfigureerde periodiciteit.

Houd echter rekening met de volgende opmerkingen bij het gebruik van TIA met Visual Studio 2015:

  • Tests parallel uitvoeren. In dit geval worden tests serieel uitgevoerd.
  • Tests uitvoeren waarvoor codedekking is ingeschakeld. In dit geval worden er geen codedekkingsgegevens verzameld.

Ondersteunde scenario's voor impactanalyse testen

Test Impact Analysis (TIA) wordt ondersteund voor de volgende scenario's:

  • TFS 2017 Update 1 en Azure Pipelines
  • Versie 2.* van de Visual Studio-testtaak in de build-pijplijn
  • VNext bouwen, met meerdere VSTest-taken
  • VS2015 Update 3 en hoger op de buildagent
  • Lokale en gehoste buildagents
  • CI en in PR-werkstromen
  • Git, GitHub, Other Git, TFVC-opslagplaatsen (inclusief gedeeltelijk toegewezen TFVC-opslagplaatsen met een tijdelijke oplossing)
  • IIS-interacties (via REST, SOAP API's), met behulp van HTTP/HTTPS-protocollen
  • Geautomatiseerde tests
  • Eén machinetopologie. Tests en app (SUT) moeten op dezelfde computer worden uitgevoerd.
  • Beheerde code (elke .NET Framework-app, elke .NET-service)

TIA wordt niet ondersteund voor de volgende scenario's:

  • Topologie met meerdere machines (waarbij de test een app uitvoert die op een andere computer is geïmplementeerd)
  • Gegevensgestuurde tests
  • TestAdapterspecifieke parallelle testuitvoering
  • .NET Core
  • UWP

Meer informatie over TIA-bereik en toepassingen

Testimpactanalyse inschakelen

TIA wordt ondersteund via versie 2.* van de Visual Studio-testtaak . Als uw app een toepassing met één laag is, hoeft u alleen de uitgevoerde tests in de taakgebruikersinterface te controleren. De gegevensverzamelaar Test Impact wordt automatisch geconfigureerd. Er zijn geen verdere stappen vereist.

TIA inschakelen in de gebruikersinterface van de VS-testtaak

Als uw toepassing communiceert met een service in de context van IIS, moet u ook de collector Test Impact-gegevens configureren om uit te voeren in de context van IIS met behulp van een .runsettings-bestand . In het volgende voorbeeld wordt deze configuratie gemaakt:

<?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>

Resultaat van testimpactanalyse weergeven

TIA is geïntegreerd in bestaande testrapportage op zowel de overzichts- als detailniveaus, inclusief e-mailberichten voor meldingen.

Rapportageoverzicht omvat TIA-integratie

De pagina Rapportagetests bevat TIA-integratie

Meer informatie over integratie van TIA en Azure Pipelines

Gedrag van testimpactanalyse beheren

U kunt de manier beïnvloeden waarop tests worden opgenomen of genegeerd tijdens een testuitvoering:

  • Via de gebruikersinterface van de VSTest-taak. TIA kan worden geconditioneerd om alle tests op een geconfigureerde periodiciteit uit te voeren. Het instellen van deze optie wordt aanbevolen en is de methode om de testselectie te reguleren.
  • Door een buildvariabele in te stellen. Zelfs nadat TIA is ingeschakeld in de VSTest-taak, kunt u deze uitschakelen voor een specifieke build door de variabele DisableTestImpactAnalysis in te stellen op true. Deze onderdrukking dwingt TIA om alle tests voor die build uit te voeren. In volgende builds gaat TIA terug naar geoptimaliseerde testselectie.

Wanneer TIA een doorvoer opent en een onbekend bestandstype ziet, valt het terug op het uitvoeren van alle tests. Hoewel deze actie goed is vanuit het oogpunt van veiligheid, kan het afstemmen van dit gedrag in sommige gevallen nuttig zijn. Voorbeeld:

  • Stel de variabele TI_IncludePathFilters in op specifieke paden om alleen deze paden op te nemen in een opslagplaats waarvoor u TIA wilt toepassen. Deze actie is handig wanneer teams een gedeelde opslagplaats gebruiken. Als u deze variabele instelt, wordt TIA uitgeschakeld voor alle andere paden die niet zijn opgenomen in de instelling.
  • Stel de TIA_IncludePathFilters variabele in om bestandstypen op te geven die geen invloed hebben op het resultaat van tests en waarvoor wijzigingen moeten worden genegeerd. Als u bijvoorbeeld wijzigingen in.csproj-bestanden wilt negeren, stelt u de variabele in op de waarde: !\*\*\\\*.csproj.

Gebruik het minimatch-patroon bij het instellen van variabelen en scheid meerdere items met een puntkomma.

Om te evalueren of TIA de juiste tests selecteert:

  • De selectie handmatig valideren. Een ontwikkelaar die weet hoe de SUT en tests zijn ontworpen, kan de testselectie handmatig valideren met behulp van de TIA-rapportagemogelijkheden.
  • Voer geselecteerde TIA-tests uit en vervolgens alle tests op volgorde. Gebruik in een build-pijplijn twee testtaken: één die alleen beïnvloede tests (T1) uitvoert en één die alle tests (T2) uitvoert. Als T1 wordt doorgegeven, controleert u ook of T2 wordt doorgegeven. Als er een mislukte test in T1 is, controleert u of T2 dezelfde set fouten rapporteert.

Meer informatie over geavanceerde configuratie van TIA

Aangepaste afhankelijkheidstoewijzingen opgeven

TIA maakt gebruik van afhankelijkheidstoewijzingen van het volgende formulier.

TestMethod1
  dependency1
  dependency2
TestMethod2
  dependency1
  dependency3

TIA kan een afhankelijkheidstoewijzing genereren voor het uitvoeren van beheerde code. Wanneer dergelijke afhankelijkheden zich bevinden .cs en .vb bestanden, kan TIA automatisch controleren op doorvoeringen in dergelijke bestanden en vervolgens tests uitvoeren die deze bronbestanden in hun lijst met afhankelijkheden hadden.

U kunt het bereik van TIA uitbreiden door expliciet de afhankelijkhedentoewijzing op te geven als een XML-bestand. U kunt bijvoorbeeld code in andere talen ondersteunen, zoals JavaScript of C++, of het scenario ondersteunen waarin tests en productcode op verschillende computers worden uitgevoerd. De toewijzing kan zelfs bij benadering zijn en de set tests die u wilt uitvoeren, kan worden opgegeven in termen van een testcasefilter, zoals u meestal zou opgeven in de VSTest-taakparameters.

Het XML-bestand moet worden ingecheckt in uw opslagplaats, meestal op hoofdniveau. Stel vervolgens de buildvariabele TIA in. UserMapFile om ernaar te verwijzen. Als het bestand bijvoorbeeld de naam TIAmap.xml heeft, stelt u de variabele in op $(System.DefaultWorkingDirectory)/TIAmap.xml.

Zie TIA aangepaste afhankelijkheidstoewijzing voor een voorbeeld van de XML-bestandsindeling.

Zie ook

Help en ondersteuning