Share via


Velocizzare i test usando l'analisi dell'impatto dei test (TIA)

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

L'integrazione continua (CI) è una pratica chiave nel settore. Le integrazioni sono frequenti e verificate con una compilazione automatizzata che esegue test di regressione per rilevare gli errori di integrazione il prima possibile. Tuttavia, man mano che la codebase cresce e matura, anche la suite di test di regressione tende a crescere, nella misura in cui l'esecuzione di un test di regressione completa potrebbe richiedere ore. Questo rallenta la frequenza delle integrazioni e infine sconfigge lo scopo dell'integrazione continua. Per avere una pipeline di integrazione continua che viene completata rapidamente, alcuni team rinviano l'esecuzione dei test con esecuzione più lunga a una fase separata nella pipeline. Tuttavia, questo serve solo per sconfiggere ulteriormente l'integrazione continua.

Abilitare invece Test Impact Analysis (TIA) quando si usa l'attività Test di Visual Studio in una pipeline di compilazione. TIA esegue la convalida incrementale mediante la selezione automatica dei test. Verrà selezionato automaticamente solo il subset di test necessari per convalidare il commit del codice. Per un determinato commit del codice che immette la pipeline CI/CD, TIA selezionerà ed eseguirà solo i test pertinenti necessari per convalidare il commit. Di conseguenza, l'esecuzione del test verrà completata più rapidamente, se si verifica un errore, si otterrà prima di tutto e poiché è tutto ambito dalla pertinenza, anche l'analisi sarà più veloce.

Confronto dei tempi di test quando si usa TIA

L'analisi dell'impatto dei test ha:

  • Un solido meccanismo di selezione dei test. Include test interessati esistenti, test con esito negativo in precedenza e test appena aggiunti.
  • Cassaforte fallback. Per i commit e gli scenari che TIA non è in grado di comprendere, eseguirà il fallback all'esecuzione di tutti i test. L'ambito tiA è attualmente limitato al codice gestito e alla topologia a computer singolo. Pertanto, ad esempio, se il commit del codice contiene modifiche ai file HTML o CSS, non può ragionare su di essi e fallback all'esecuzione di tutti i test.
  • Override configurabili. È possibile eseguire tutti i test in una periodicità configurata.

Tenere tuttavia presente quanto segue quando si usa TIA con Visual Studio 2015:

  • Esecuzione di test in parallelo. In questo caso, i test verranno eseguiti serialmente.
  • Esecuzione di test con code coverage abilitato. In questo caso, i dati di code coverage non verranno raccolti.

Scenari supportati per l'analisi dell'impatto dei test

Attualmente, TIA è supportato per:

  • TFS 2017 Update 1 e Azure Pipelines
  • Versione 2.* dell'attività Test di Visual Studio nella pipeline di compilazione
  • Compilare vNext, con più attività VSTest
  • VS2015 Update 3 e versioni successive sull'agente di compilazione
  • Agenti di compilazione locali e ospitati
  • Integrazione continua e nei flussi di lavoro delle richieste pull
  • Git, GitHub, Altri repository Git, TFVC (inclusi repository TFVC parzialmente mappati con una soluzione alternativa)
  • Interazioni con IIS (su REST, API SOAP), tramite protocolli HTTP/HTTPS
  • Test automatizzati
  • Topologia a computer singolo. I test e le app (SUT) devono essere in esecuzione nello stesso computer.
  • Codice gestito (qualsiasi app .NET Framework, qualsiasi servizio .NET)

Attualmente, TIA non è supportato per:

  • Topologia multi-computer (in cui il test sta esercitando un'app distribuita in un computer diverso)
  • Test basati sui dati
  • Esecuzione di test paralleli specifici dell'adapter di test
  • .NET Core
  • UWP

Altre informazioni sull'ambito e le applicazioni TIA

Abilitare l'analisi dell'impatto dei test

TIA è supportato tramite la versione 2.* dell'attività Test di Visual Studio. Se l'app è un'applicazione a livello singolo, è sufficiente controllare Eseguire solo i test interessati nell'interfaccia utente dell'attività. L'agente di raccolta dati impatto test viene configurato automaticamente. Non sono necessari altri passaggi.

Abilitare TIA nell'interfaccia utente dell'attività Test di Visual Studio

Se l'applicazione interagisce con un servizio nel contesto di IIS, è necessario configurare anche l'agente di raccolta dati impatto test per l'esecuzione nel contesto di IIS usando un file con estensione runsettings . Ecco un esempio che crea questa configurazione:

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

Visualizzare il risultato dell'analisi dell'impatto dei test

TIA è integrato nei report di test esistenti sia a livello di riepilogo che di dettagli, inclusi i messaggi di posta elettronica di notifica.

Riepilogo report include l'integrazione TIA

La pagina Dei test di creazione di report include l'integrazione TIA

Altre informazioni sull'integrazione di TIA e Azure Pipelines

Gestire il comportamento dell'analisi dell'impatto dei test

È possibile influenzare il modo in cui i test vengono inclusi o ignorati durante un'esecuzione di test:

  • Tramite l'interfaccia utente dell'attività VSTest. TiA può essere condizionata per eseguire tutti i test in una periodicità configurata. L'impostazione di questa opzione è consigliata ed è il modo per regolare la selezione dei test.
  • Impostando una variabile di compilazione. Anche dopo l'abilitazione di TIA nell'attività VSTest, può essere disabilitata per una compilazione specifica impostando la variabile DisableTestImpactAnalysis su true. Questa sostituzione forza l'esecuzione di tutti i test per tale compilazione. Nelle build successive, TIA tornerà alla selezione di test ottimizzata.

Quando TIA apre un commit e rileva un tipo di file sconosciuto, esegue nuovamente l'esecuzione di tutti i test. Anche se questo comportamento è ottimale dal punto di vista della sicurezza, l'ottimizzazione di questo comportamento potrebbe risultare utile in alcuni casi. Ad esempio:

  • Impostare la variabile TI_IncludePathFilters su percorsi specifici in modo da includere solo questi percorsi in un repository per cui si vuole applicare TIA. Ciò è utile quando i team usano un repository condiviso. L'impostazione di questa variabile disabilita TIA per tutti gli altri percorsi non inclusi nell'impostazione.
  • Impostare la variabile TIA_IncludePathFilters per specificare i tipi di file che non influiscono sul risultato dei test e per cui le modifiche devono essere ignorate. Ad esempio, per ignorare le modifiche apportate ai file con estensione csproj impostare la variabile sul valore !**\*.csproj.

Usare il modello di minimatch quando si impostano variabili e separare più elementi con un punto e virgola.

Per valutare se TIA seleziona i test appropriati:

  • Convalidare manualmente la selezione. Uno sviluppatore che sa come vengono progettato i test e SUT potrebbe convalidare manualmente la selezione dei test usando le funzionalità di creazione di report TIA.
  • Eseguire test selezionati TIA e quindi tutti i test in sequenza. In una pipeline di compilazione usare due attività di test, una che esegue solo test interessati (T1) e una che esegue tutti i test (T2). Se T1 viene superato, verificare che anche T2 passi. Se si è verificato un test non riuscito in T1, verificare che T2 segnala lo stesso set di errori.

Altre informazioni sulla configurazione avanzata TIA

Fornire mapping di dipendenze personalizzati

TIA usa le mappe delle dipendenze del formato seguente.

TestMethod1
  dependency1
  dependency2
TestMethod2
  dependency1
  dependency3

TIA può generare una mappa di tali dipendenze per l'esecuzione del codice gestito. Se tali dipendenze risiedono in .cs e .vb file, TIA può controllare automaticamente i commit in tali file e quindi eseguire test con questi file di origine nell'elenco delle dipendenze.

È possibile estendere l'ambito di TIA specificando in modo esplicito il mapping delle dipendenze come file XML. Ad esempio, è possibile supportare il codice in altri linguaggi, ad esempio JavaScript o C++, oppure supportare lo scenario in cui i test e il codice prodotto sono in esecuzione in computer diversi. Il mapping può anche essere approssimativo e il set di test da eseguire può essere specificato in termini di filtro del test case, ad esempio nei parametri dell'attività VSTest.

Il file XML deve essere archiviato nel repository, in genere a livello radice. Impostare quindi la variabile di compilazione TIA. UserMapFile a cui puntare. Ad esempio, se il file è denominato TIAmap.xml, impostare la variabile su $(System.DefaultWorkingDirectory)/TIAmap.xml.

Per un esempio del formato di file XML, vedere Mapping delle dipendenze personalizzate TIA.

Vedi anche

Assistenza e supporto