PublishTestResults@2 - Pubblicare i risultati dei test v2 attività

Pubblicare i risultati dei test in Azure Pipelines.

Pubblicare i risultati dei test in Azure Pipelines/TFS.

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.
# Publish Test Results v2
# Publish Test Results to Azure Pipelines/TFS.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit'. 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.
    #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.

Input

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

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


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

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


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

Specifica uno o più file di risultati di test.

  • È possibile usare un carattere jolly a cartella singola () e 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 di risultato 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 minimatch.

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


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

facoltativo. Specifica la cartella da cercare nei file dei risultati del test.


mergeTestResults - Risultati dei test di merge
boolean. Valore predefinito: false.

Quando questo valore booleano è true, l'attività segnala i risultati del test da tutti i file rispetto a un'esecuzione di test singola. Se il valore è false, l'attività crea un'esecuzione di test separata per ogni file di risultato del test.

Nota

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


failTaskOnFailedTests - Errore se si verificano errori di test
boolean. Valore predefinito: false.

facoltativo. Quando il valore di questo booleano è true, l'attività avrà esito negativo se uno dei test nel file dei risultati viene contrassegnato come non riuscito. Il valore predefinito è false, che pubblica semplicemente i risultati dal file dei risultati.


failTaskOnFailureToPublishResults - Errore se si verifica un errore nella pubblicazione dei risultati dei test
boolean. Valore predefinito: false.

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


failTaskOnMissingResultsFile - Errore se non vengono trovati file di risultato
boolean. Valore predefinito: false.

Eseguire l'errore dell'attività se non vengono trovati file di risultato.


testRunTitle - Titolo esecuzione test
string.

facoltativo. 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 compilazione
Alias di input: platform. string.

facoltativo. 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 compilazione
Alias di input: configuration. string.

facoltativo. 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.

facoltativo. Quando questo valore booleano è true, l'attività carica tutti i file di risultato del test come allegati all'esecuzione del test.


Opzioni di controllo delle attività

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

Variabili di output

Nessuno.

Osservazioni

Questa attività pubblica i risultati dei test in Azure Pipelines o TFS quando vengono eseguiti test per offrire un'esperienza completa di report e analisi dei test. È possibile usare il testrunner di propria scelta che supporta il formato dei risultati necessario. I formati di 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 librerie di compilazione, ad esempio 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 gli errori e guidare la proprietà degli errori.

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

Aprire la pagina della cronologia dei test

È anche possibile usare questa attività in una pipeline di compilazione per pubblicare i risultati della 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, il computer deve disporre di questo prerequisito installato:

Impostazioni predefinite dell'attività

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

testResultsFormat è un alias per il nome di input testRunner . I file dei risultati possono essere prodotti da più strumenti di esecuzione, non solo da uno strumento di esecuzione specifico. Ad esempio, il formato dei risultati jUnit è supportato da molti strumenti di esecuzione 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.

Mapping dei formati dei risultati

Questa tabella elenca i campi riportati nella scheda Test in un riepilogo della compilazione o della versione e il mapping corrispondente con gli attributi nei formati dei risultati del test supportati.

Ambito Campo Test di Visual Studio (TRX)
Esecuzione dei test Titolo Titolo esecuzione test specificato nell'attività
Data di inizio /TestRun/Times.Attributes["start"]. Valore
Data di completamento /TestRun/Times.Attributes["finish"]. Valore
Durata Data di completamento - Data di inizio
Allegati Vedere la sezione supporto allegati di seguito
Risultato del test Titolo /TestRun/Results/UnitTestResult.Attributes["testName"]. Value o /TestRun/Results/WebTestResult.Attributes["testName"]. Value o /TestRun/Results/TestResultAggregation.Attributes["testName"]. Valore
Data di inizio /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value o /TestRun/Results/WebTestResult.Attributes["startTime"]. Value o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valore
Data di completamento /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value + /TestRun/Results/UnitTestResult.Attributes["duration"]. Value o /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["duration"]. Value o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valore
Durata /TestRun/Results/UnitTestResult.Attributes["duration"]. Value o /TestRun/Results/WebTestResult.Attributes["duration"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valore
Proprietario /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Valore
Risultato /TestRun/Results/UnitTestResult.Attributes["outcome"]. Value o /TestRun/Results/WebTestResult.Attributes["outcome"]. Value 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 Or /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText Or /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Allegati Vedere la sezione supporto allegati di seguito
Log della console /TestRun/Results/UnitTestResult/Output/StdOut.InnerText o /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText Or /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Log degli errori della console /TestRun/Results/UnitTestResult/Output/StdErr.InnerText o /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText Or /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Nome agente /TestRun/Results/UnitTestResult.Attributes["computerName"]. Value o /TestRun/Results/WebTestResult.Attributes["computerName"]. Value o /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Valore
File di test /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Valore
Priorità /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Valore

Nota

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

Il formato del nome completo per testName è Namespace.Testclass.Methodname con un limite di caratteri pari a 512. Se il test è basato sui dati e ha 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à non valida specificata

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

Supporto degli allegati

L'attività Pubblica risultati test fornisce il supporto per gli allegati per i risultati dell'esecuzione del test e 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 dei test Agente di raccolta dati /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore
Risultato del test /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Valore
Code coverage /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 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["path"]. Valore o /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Valore o /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Valore

Nota

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

Esempio

Docker

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

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

Compilare, testare e pubblicare risultati con un file Docker

In questo approccio si compilano il codice ed eseguono test all'interno del contenitore usando un file Docker. I risultati del test vengono quindi copiati nell'host da pubblicare 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. Creare un Dockerfile.build file nella radice della directory del 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 codice ed eseguire 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 artefatti di runtime e distribuzione, sostituire il contenuto dell'immagine esistente Dockerfile con quanto segue:

    # 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 contenuto del .vsts-ci.docker.yml file con quanto segue:

    # 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 nel Registro di sistema, sostituire il contenuto del .vsts-ci.yml file con quanto segue:

    # 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 nel repository.

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

  4. Aggiornare 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 la password amministratore Registro Azure Container.
    • Percorso file YAML: /.vsts-ci.docker.yml
  5. Accodare una nuova compilazione e watch crea e esegue il push di un'immagine Docker nel Registro di sistema e i risultati dei test in Azure DevOps.

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Esecuzione in Agente, DeploymentGroup
Richieste Nessuno
Capabilities Questa attività non soddisfa le richieste per le attività successive nel processo.
Restrizioni dei comandi Qualsiasi
Variabili impostabili Qualsiasi
Versione agente 2.0.0 o versione successiva
Categoria attività Test