Condividi tramite


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 il gruppo di test di regressione tende a crescere, nella misura in cui l'esecuzione di un test di regressione completa potrebbe richiedere ore. Questo test 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, questa azione 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. Seleziona 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 seleziona ed esegue solo i test pertinenti necessari per convalidare il commit. Pertanto, l'esecuzione del test viene completata più rapidamente, se si verifica un errore che si riceve un avviso prima e perché è tutto ambito dalla pertinenza, anche l'analisi è 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.
  • Fallback sicuro. Per i commit e gli scenari non comprensibili da TIA, viene eseguito 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 vengono eseguiti serialmente.
  • Esecuzione di test con code coverage abilitato. In questo caso, i dati di code coverage non vengono raccolti.

Scenari supportati per l'analisi dell'impatto dei test

L'analisi dell'impatto dei test è supportata per gli scenari seguenti:

  • 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)

TIA non è supportato per gli scenari seguenti:

  • 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 . L'esempio seguente 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, è possibile disabilitarla per una compilazione specifica impostando la variabile DisableTestImpactAnalysis su true. Questa override impone a TIA di eseguire tutti i test per la compilazione. Nelle build successive, TIA torna 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 questa azione è valida dal punto di vista della sicurezza, l'ottimizzazione di questo comportamento potrebbe essere 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. Questa azione è 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 delle dipendenze per l'esecuzione del codice gestito. Se tali dipendenze risiedono in .cs e .vb nei 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