Condividi tramite


PublishTestResults@2 - Attività Pubblica risultati test v2

Pubblicare i risultati dei test in Azure Pipelines.

Sintassi

# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #failTaskOnFailureToPublishResults: false # boolean. Fail if there is failure in publishing test results. Default: false.
    #failTaskOnMissingResultsFile: false # boolean. Fail if no result files are found. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.

Ingressi dati

testResultsFormat - Formato dei risultati del test
Alias di input: testRunner. string. Obbligatorio. Valori consentiti: JUnit, NUnit, VSTest, XUnit, CTest. Valore predefinito: JUnit

Specifica il formato dei file di risultati da pubblicare. Sono supportati i formati seguenti: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.

Suggerimento

VSTest format si riferisce al formato TRX. Pertanto, funziona anche se si produce TRX con Microsoft.Testing.Platform (MTP) e non è specifico di VSTest. Il valore è VSTest per motivi storici, prima dell'introduzione di MTP.


testResultsFiles - file dei risultati dei test
string. Obbligatorio. Valore predefinito: **/TEST-*.xml

Specifica uno o più file di risultati del test.

  • È possibile usare un carattere jolly a cartella singola (*) e i caratteri jolly ricorsivi (**). Ad esempio, **/TEST-*.xml cerca tutti i file XML i cui nomi iniziano con TEST- in tutte le sottodirectory. Se si usa VSTest come formato dei risultati del test, il tipo di file deve essere modificato in .trx, ad esempio **/TEST-*.trx
  • È possibile specificare più percorsi, separati da una nuova riga.
  • Accetta inoltre modelli di minimatch.

Ad esempio, !TEST[1-3].xml esclude i file denominati TEST1.xml, TEST2.xmlo TEST3.xml.


searchFolder - cartella di ricerca
string. Valore predefinito: $(System.DefaultWorkingDirectory)

Opzionale. Specifica la cartella in cui cercare i file dei risultati del test.


mergeTestResults - Unire i risultati del test
boolean. Valore predefinito: false

Quando il valore di questo valore booleano è true, l'attività segnala i risultati del test da tutti i file rispetto a un'unica esecuzione di test . Se il valore è false, l'attività crea un'esecuzione di test separata per ogni file di risultati del test. Per ottimizzare le prestazioni, i risultati verranno sempre uniti in un'unica esecuzione se sono presenti più di 100 file di risultati, anche se questa opzione è impostata su false.

Annotazioni

Usare l'impostazione dei risultati del test di merge per combinare file dello stesso framework di test per garantire che il mapping dei risultati e la durata vengano calcolati correttamente.


failTaskOnFailedTests - Esito negativo in caso di errori di test
boolean. Valore predefinito: false

Opzionale. Quando il valore di questo valore booleano è true, l'attività avrà esito negativo se uno dei test nel file dei risultati è contrassegnato come non riuscito. L'impostazione predefinita è false, che pubblicherà semplicemente i risultati dal file dei risultati.


failTaskOnFailureToPublishResults - Errore in caso di errore nella pubblicazione dei risultati del test
boolean. Valore predefinito: false

Quando true, l'attività non riesce se si verifica un errore nella pubblicazione dei risultati del test.


failTaskOnMissingResultsFile - Errore se non viene trovato alcun file di risultati
boolean. Valore predefinito: false

Non riesce l'attività se non viene trovato alcun file di risultati.


testRunTitle - Titolo esecuzione test
string.

Opzionale. Specifica un nome per l'esecuzione del test in base al quale verranno segnalati i risultati. I nomi delle variabili dichiarati nella pipeline di compilazione o versione possono essere usati.


buildPlatform - Piattaforma di costruzione
Alias di input: platform. string.

Opzionale. Specifica la piattaforma di compilazione in base alla quale deve essere segnalata l'esecuzione del test. Ad esempio: x64 o x86. Se è stata definita una variabile per la piattaforma nell'attività di compilazione, usarla qui.


buildConfiguration - Configurazione della build
Alias di input: configuration. string.

Opzionale. Specifica la configurazione di compilazione in base alla quale deve essere segnalata l'esecuzione del test. Ad esempio: Debug o Release. Se è stata definita una variabile per la configurazione nell'attività di compilazione, usarla qui.


publishRunAttachments - Caricare i file dei risultati dei test
boolean. Valore predefinito: true

Opzionale. Quando il valore di questo valore booleano è true, l'attività carica tutti i file dei risultati del test come allegati all'esecuzione del test.


Opzioni di controllo delle attività

Tutte le attività hanno opzioni di controllo oltre ai relativi input di attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.

Variabili di uscita

Nessuno.

Osservazioni:

Questa attività pubblica i risultati dei test in Azure Pipelines o TFS quando vengono eseguiti i test per offrire un'esperienza completa di creazione di report e analisi dei test. È possibile utilizzare il test runner di propria scelta che supporta il formato dei risultati richiesto. I formati dei risultati supportati includono CTest, JUnit (incluso PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.

Altre attività predefinite, ad esempio l'attività Test di Visual Studio e l'attività dell'interfaccia della riga di comando Dot NetCore , pubblicano automaticamente i risultati dei test nella pipeline. Attività come Ant, Maven, Gulp, Grunt e Xcode forniscono risultati di pubblicazione come opzione all'interno dell'attività o creano librerie come Cobertura e JaCoCo. Se si usa una di queste attività, non è necessaria un'attività Pubblica risultati test separata nella pipeline.

I risultati dei test pubblicati vengono visualizzati nella scheda Test nel riepilogo della pipeline. I risultati consentono di misurare la qualità della pipeline, esaminare la tracciabilità, risolvere i problemi relativi agli errori e gestire la proprietà dei guasti.

Nell'esempio seguente viene illustrata la configurazione dell'attività per la pubblicazione dei risultati dei test.

Apri la pagina della cronologia dei test

È anche possibile usare questa attività in una pipeline di compilazione per pubblicare i risultati del code coverage prodotti durante l'esecuzione di test in Azure Pipelines o TFS per ottenere report di copertura.

Prerequisiti

Se si usa un agente self-hosted di Windows, nel computer deve essere installato questo prerequisito:

Impostazioni predefinite delle attività

L'opzione predefinita utilizza il formato JUnit per pubblicare i risultati del test. Quando si utilizza VSTest come testRunner, l'opzione testResultsFiles deve essere modificata in **/TEST-*.trx.

testResultsFormat è un alias per il nome dell'input testRunner . I file dei risultati possono essere prodotti da più corridori, non solo da un corridore specifico. Ad esempio, il formato dei risultati jUnit è supportato da molti runner e non solo da jUnit.

Per pubblicare i risultati dei test per Python usando YAML, vedere Python nella sezione Ecosistemi di questi argomenti, che include anche esempi per altri linguaggi.

Mappatura dei formati dei risultati

In questa tabella sono elencati i campi riportati nella scheda Test di una compilazione o di un riepilogo della versione e il mapping corrispondente con gli attributi nei formati dei risultati dei test supportati.

Ambito Campo Test di Visual Studio (TRX)
Prova di funzionamento Titolo Titolo dell'esecuzione dei test specificato nell'attività
Data di inizio /TestRun/Times.Attributes["inizio"]. Valore
Data di completamento /TestRun/Times.Attributes["fine"]. Valore
Durata Data di completamento - Data di inizio
Allegati Fare riferimento alla sezione Supporto allegati di seguito
Risultato del test Titolo /TestRun/Results/UnitTestResult.Attributes["testName"]. Valore o /TestRun/Results/WebTestResult.Attributes["testName"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["testName"]. Valore
Data di inizio /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valore o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valore
Data di completamento /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valore + /TestRun/Results/UnitTestResult.Attributes["duration"]. Valore o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valore + /TestRun/Results/WebTestResult.Attributes["duration"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valore + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valore
Durata /TestRun/Results/UnitTestResult.Attributes["duration"]. Valore o /TestRun/Results/WebTestResult.Attributes["duration"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valore
Proprietario /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["nome"]. Valore
Risultato /TestRun/Results/UnitTestResult.Attributes["risultato"]. Valore o /TestRun/Results/WebTestResult.Attributes["outcome"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["outcome"]. Valore
Messaggio di errore /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText O /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText O /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
Analisi dello stack /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText O /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText O /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Allegati Fare riferimento alla sezione Supporto allegati di seguito
Registro della console /TestRun/Risultati/UnitTestResult/Output/StdOut.InnerText O /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText O /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Registro degli errori della console /TestRun/Risultati/UnitTestResult/Output/StdErr.InnerText O /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText O /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Nome agente /TestRun/Results/UnitTestResult.Attributes["nomecomputer"]. Valore o /TestRun/Results/WebTestResult.Attributes["computerName"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Valore
File di prova /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Valore
Priorità /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Valore

Annotazioni

La durata viene utilizzata solo quando la data di inizio e la data di completamento non sono disponibili.

Il formato completo del nome per testName è Namespace.Testclass.Methodname con un limite di 512 caratteri. Se il test è basato sui dati e dispone di parametri, il limite di caratteri includerà i parametri.

Durante la pubblicazione del risultato del test, è possibile che venga visualizzato questo errore: Impossibile pubblicare i risultati del test: Priorità specificata non valida

Questo errore si verifica se uno dei metodi di test ha una priorità impostata su 255, correggi la priorità del metodo di test nel codice ed esegui nuovamente i test. È possibile esaminare il file trx generato per visualizzare tutti i test con priorità maggiore di 255.

Supporto allegati

L'attività Pubblica risultati test fornisce il supporto per gli allegati sia per l'esecuzione dei test che per i risultati dei test per i formati seguenti. Per i progetti pubblici, supportiamo 2 GB di allegati totali.

Test di Visual Studio (TRX)

Ambito TIPO Percorso
Esecuzione di prova Agente di raccolta dati /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore
Risultato del test /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["percorso"]. Valore
Copertura del codice /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Valore e /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Valore
Risultato del test Agenti di raccolta dati /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore o /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore o /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore
Risultato del test /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["percorso"]. Valore o /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Valore o /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Valore

Annotazioni

L'opzione per caricare il file dei risultati del test come allegato è un'opzione predefinita nell'attività, applicabile a tutti i formati.

Esempi

Scaricatore

Per le app basate su Docker, esistono molti modi per creare l'applicazione ed eseguire test:

  • Compilare e testare in una pipeline di compilazione: le compilazioni e i test vengono eseguiti nella pipeline e i risultati dei test vengono pubblicati usando l'attività Pubblica risultati test .
  • Compila e testa con un Dockerfile a più fasi: le compilazioni e i test vengono eseguiti all'interno del contenitore usando un file Docker a più fasi, poiché tali risultati dei test non vengono pubblicati nuovamente nella pipeline.
  • Compilare, testare e pubblicare i risultati con un Dockerfile: le compilazioni e i test vengono eseguiti all'interno del contenitore e i risultati vengono pubblicati nuovamente nella pipeline. Vedere l'esempio seguente.

Crea, testa e pubblica i risultati con un file Docker

In questo approccio, si compila il codice ed si eseguono test all'interno del contenitore usando un file Docker. I risultati del test vengono quindi copiati nell'host per essere pubblicati nella pipeline. Per pubblicare i risultati del test in Azure Pipelines, è possibile usare l'attività Pubblica risultati test . L'immagine finale verrà pubblicata in Docker o Registro Azure Container.

Ottenere il codice
  1. Crea un Dockerfile.build file nella directory principale del tuo progetto con quanto segue:

    # Build and run tests inside the docker container
    FROM mcr.microsoft.com/dotnet/sdk:2.1
    WORKDIR /app
    # copy the contents of agent working directory on host to workdir in container
    COPY . ./
    # dotnet commands to build, test, and publish
    RUN dotnet restore
    RUN dotnet build -c Release
    RUN dotnet test dotnetcore-tests/dotnetcore-tests.csproj -c Release --logger "trx;LogFileName=testresults.trx"
    RUN dotnet publish -c Release -o out
    ENTRYPOINT dotnet dotnetcore-sample/out/dotnetcore-sample.dll
    

    Questo file contiene le istruzioni per compilare il codice ed eseguire i test. I test vengono quindi copiati in un file testresults.trx all'interno del contenitore.

  2. Per rendere l'immagine finale il più piccola possibile, contenente solo gli elementi di runtime e distribuzione, sostituire il contenuto dell'immagine esistente Dockerfile con il seguente:

    # This Dockerfile creates the final image to be published to Docker or
    # Azure Container Registry
    # Create a container with the compiled asp.net core app
    FROM mcr.microsoft.com/dotnet/aspnet:2.1
    # Create app directory
    WORKDIR /app
    # Copy only the deployment artifacts
    COPY /out .
    ENTRYPOINT ["dotnet", "dotnetcore-sample.dll"]
    
Definire la pipeline di compilazione
  1. Se si dispone di un account Docker Hub e si vuole eseguire il push dell'immagine nel registro Docker, sostituire il .vsts-ci.docker.yml contenuto del file con il seguente:

    # Build Docker image for this app, to be published to Docker Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId)/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd
        docker push $(dockerId)/dotnetcore-sample:$BUILD_BUILDID
      env:
        pswd: $(dockerPassword)
    

    In alternativa, se si configura un Registro Azure Container e si vuole eseguire il push dell'immagine in tale registro, sostituire il .vsts-ci.yml contenuto del file con il seguente:

    # Build Docker image for this app to be published to Azure Container Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd $(dockerid).azurecr.io
        docker push $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID 
      env:
        pswd: $(dockerPassword)
    
  2. Eseguire il push della modifica nel ramo principale del repository.

  3. Se si usa Registro Azure Container, assicurarsi di aver creato in anticipo il registro nel portale di Azure. Copiare il nome utente e la password dell'amministratore visualizzati nella sezione Chiavi di accesso delle impostazioni del Registro di sistema nel portale di Azure.

  4. Aggiorna la pipeline di compilazione con quanto segue

    • Pool di agenti: Hosted Ubuntu 1604
      • dockerId: impostare il valore sull'ID Docker per DockerHub o sul nome utente amministratore per Registro Azure Container.
      • dockerPassword: impostare il valore sulla password per DockerHub o sulla password dell'amministratore Azure Container Registry.
    • Percorso del file YAML: /.vsts-ci.docker.yml
  5. Accodare una nuova build e osservarla mentre crea ed esegue il push di un'immagine Docker nel registro e i risultati del test in Azure DevOps.

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Viene eseguito in Agente, DeploymentGroup
Richieste Nessuno
Funzionalità Questa attività non soddisfa alcuna richiesta di attività successive nel processo.
restrizioni dei comandi Qualunque
variabili impostabili Qualunque
Versione agente 2.0.0 o versione successiva
Categoria attività Prova