Partilhar via


PublishTestResults@2 - Tarefa Publicar Resultados do Teste v2

Publicar resultados de teste no Azure Pipelines.

Publicar Resultados do Teste no Azure Pipelines/TFS.

Syntax

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

Entradas

testResultsFormat - Testar formato de resultado
Alias de entrada: testRunner. string. Obrigatório. Valores permitidos: JUnit, , NUnitVSTest, XUnit, CTest. Valor predefinido: JUnit.

Especifica o formato dos ficheiros de resultados que pretende publicar. São suportados os seguintes formatos: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.


testResultsFormat - Testar formato de resultado
Alias de entrada: testRunner. string. Obrigatório. Valores permitidos: JUnit, NUnit, VSTest, XUnit. Valor predefinido: JUnit.

Especifica o formato dos ficheiros de resultados que pretende publicar. São suportados os seguintes formatos: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.


testResultsFiles - Ficheiros de resultados de teste
string. Obrigatório. Valor predefinido: **/TEST-*.xml.

Especifica um ou mais ficheiros de resultados de teste.

  • Pode utilizar um caráter universal de pasta única (*) e carateres universais recursivos (**). Por exemplo, **/TEST-*.xml procura todos os ficheiros XML cujos nomes começam com TEST- em todos os subdiretórios. Se utilizar o VSTest como o formato de resultado de teste, o tipo de ficheiro deve ser alterado para .trx , por exemplo, **/TEST-*.trx
  • Podem ser especificados vários caminhos, separados por uma nova linha.
  • Além disso, aceita padrões de correspondência mínimo.

Por exemplo, !TEST[1-3].xml exclui ficheiros denominados TEST1.xml, TEST2.xmlou TEST3.xml.


searchFolder - Pesquisa pasta
string. Valor predefinido: $(System.DefaultWorkingDirectory).

Opcional. Especifica a pasta a procurar os ficheiros de resultados de teste.


mergeTestResults - Intercalar resultados do teste
boolean. Valor predefinido: false.

Quando o valor deste valor booleano é true, a tarefa comunica os resultados do teste de todos os ficheiros relativamente a uma única execução de teste. Se o valor for false, a tarefa cria uma execução de teste separada para cada ficheiro de resultado de teste.

Nota

Utilize a definição de resultados do teste de intercalação para combinar ficheiros da mesma arquitetura de teste para garantir que o mapeamento e a duração dos resultados são calculados corretamente.


failTaskOnFailedTests - Falhar se existirem falhas de teste
boolean. Valor predefinido: false.

Opcional. Quando o valor deste valor booleano for true, a tarefa falhará se algum dos testes no ficheiro de resultados for marcado como com falha. A predefinição é false, que irá simplesmente publicar os resultados do ficheiro de resultados.


failTaskOnFailureToPublishResults - Falhar se ocorrer uma falha na publicação dos resultados do teste
boolean. Valor predefinido: false.

Quando true, falha a tarefa se ocorrer uma falha na publicação dos resultados do teste.


failTaskOnMissingResultsFile - Falhar se não forem encontrados ficheiros de resultados
boolean. Valor predefinido: false.

Falhe na tarefa se não forem encontrados ficheiros de resultados.


testRunTitle - Título da execução de teste
string.

Opcional. Especifica um nome para a execução de teste em relação à qual os resultados serão comunicados. Podem ser utilizados nomes de variáveis declarados no pipeline de compilação ou versão.


buildPlatform - Criar Plataforma
Alias de entrada: platform. string.

Opcional. Especifica a plataforma de compilação na qual a execução de teste deve ser reportada. Por exemplo: x64 ou x86. Se definiu uma variável para a plataforma na sua tarefa de compilação, utilize-a aqui.


buildConfiguration - Configuração da Compilação
Alias de entrada: configuration. string.

Opcional. Especifica a configuração de compilação em relação à qual a execução de teste deve ser reportada. Por exemplo: Debug ou Release. Se definiu uma variável para a configuração na tarefa de compilação, utilize-a aqui.


publishRunAttachments - Carregar ficheiros de resultados do teste
boolean. Valor predefinido: true.

Opcional. Quando o valor deste valor booleano é true, a tarefa carrega todos os ficheiros de resultado de teste como anexos para a execução de teste.


Opções de controlo de tarefas

Todas as tarefas têm opções de controlo para além das entradas de tarefas. Para obter mais informações, veja Opções de controlo e propriedades de tarefas comuns.

Variáveis de saída

Nenhum.

Observações

Esta tarefa publica os resultados dos testes nos Pipelines do Azure ou no TFS quando os testes são executados para proporcionar uma experiência de análise e relatórios de teste abrangente. Pode utilizar a execução de testes à sua escolha que suporta o formato de resultados de que necessita. Os formatos de resultados suportados incluem CTest, JUnit (incluindo PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.

Outras tarefas incorporadas, como a tarefa de Teste do Visual Studio e a tarefa da CLI do Dot NetCore , publicam automaticamente os resultados do teste no pipeline. Tarefas como Ant, Maven, Gulp, Grunt e Xcode fornecem resultados de publicação como uma opção dentro da tarefa ou criam bibliotecas como Cobertura e JaCoCo. Se estiver a utilizar qualquer uma destas tarefas, não precisa de uma tarefa publicar resultados de teste separada no pipeline.

Os resultados dos testes publicados são apresentados no separador Testes no resumo do pipeline. Os resultados ajudam-no a medir a qualidade do pipeline, a rever a rastreabilidade, a resolver problemas de falhas e a impulsionar a propriedade de falhas.

O exemplo seguinte mostra que a tarefa está configurada para publicar resultados de teste.

Abrir a página do histórico de testes

Também pode utilizar esta tarefa num pipeline de compilação para publicar os resultados de cobertura do código produzidos ao executar testes nos Pipelines do Azure ou no TFS para obter relatórios de cobertura.

Pré-requisitos

Se estiver a utilizar um agente autoalojado do Windows, o computador tem de ter este pré-requisito instalado:

Predefinições de tarefas

A opção predefinida utiliza o formato JUnit para publicar resultados de teste. Ao utilizar o VSTest como testRunner, a opção testResultsFiles deve ser alterada para **/TEST-*.trx.

testResultsFormat é um alias para o nome de entrada testRunner . Os ficheiros de resultados podem ser produzidos por vários corredores, não apenas por um corredor específico. Por exemplo, o formato de resultados jUnit é suportado por muitos corredores e não apenas jUnit.

Para publicar resultados de teste para Python com YAML, veja Python na secção Ecossistemas destes tópicos, que também inclui exemplos para outras linguagens.

Mapeamento de formatos de resultados

Esta tabela lista os campos comunicados no separador Testes num resumo de compilação ou versão e o mapeamento correspondente com os atributos nos formatos de resultados de teste suportados.

Âmbito Campo Visual Studio Test (TRX)
Teste de execução Título Título da execução de teste especificado na tarefa
Data de início /TestRun/Times.Attributes["start"]. Valor
Data de conclusão /TestRun/Times.Attributes["finish"]. Valor
Duração Data de conclusão - Data de início
Anexos Veja a secção de suporte de Anexos abaixo
Resultado do teste Título /TestRun/Results/UnitTestResult.Attributes["testName"]. Value Or /TestRun/Results/WebTestResult.Attributes["testName"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["testName"]. Valor
Data de início /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value Or /TestRun/Results/WebTestResult.Attributes["startTime"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor
Data de conclusão /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valor + /TestRun/Results/UnitTestResult.Attributes["duration"]. Value Or /TestRun/Results/WebTestResult.Attributes["startTime"]. Valor + /TestRun/Results/WebTestResult.Attributes["duration"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valor
Duração /TestRun/Results/UnitTestResult.Attributes["duration"]. Value Or /TestRun/Results/WebTestResult.Attributes["duration"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valor
Proprietário /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Valor
Resultado /TestRun/Results/UnitTestResult.Attributes["outcome"]. Valor Ou /TestRun/Results/WebTestResult.Attributes["outcome"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["outcome"]. Valor
Mensagem de erro /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText Ou /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText Ou /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
Rastreio de pilha /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText ou /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText ou /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Anexos Veja a secção de suporte de Anexos abaixo
Registo da consola /TestRun/Results/UnitTestResult/Output/StdOut.InnerText Ou /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText Or /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Registo de erros da consola /TestRun/Results/UnitTestResult/Output/StdErr.InnerText Or /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText Or /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Nome do agente /TestRun/Results/UnitTestResult.Attributes["computerName"]. Value Or /TestRun/Results/WebTestResult.Attributes["computerName"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Valor
Ficheiro de teste /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Valor
Prioridade /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Valor

Nota

A duração só é utilizada quando Data iniciada e Data concluída não estão disponíveis.

O formato de nome completamente qualificado para testName é Namespace.Testclass.Methodname com um limite de carateres de 512. Se o teste for baseado em dados e tiver parâmetros, o limite de carateres incluirá os parâmetros.

Ao publicar o resultado do teste, poderá obter este erro: Falha ao publicar os resultados dos testes: Prioridade Inválida especificada

Este erro ocorre se qualquer um dos métodos de teste tiver uma prioridade definida acima de 255, corrigir a prioridade do método de teste no código e executar novamente os testes. Pode rever o ficheiro trx gerado para ver todos os testes com prioridade superior a 255.

Suporte de anexos

A tarefa Publicar Resultados de Teste fornece suporte para anexos para execução de teste e resultados de teste para os seguintes formatos. Para projetos públicos, suportamos 2 GB de anexos totais.

Visual Studio Test (TRX)

Âmbito Tipo Caminho
Execução de teste Recoletor de Dados /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valor
Resultado do Teste /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Valor
Cobertura do Código /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Value And /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Valor
Resultado do teste Recoletores de Dados /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valor Ou /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Value Or /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valor
Resultado do Teste /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Or /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Or /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Valor

Nota

A opção para carregar o ficheiro de resultados de teste como anexo é uma opção predefinida na tarefa, aplicável a todos os formatos.

Exemplos

Docker

Para aplicações baseadas no Docker, existem várias formas de criar a sua aplicação e executar testes:

  • Compilar e testar num pipeline de compilação: as compilações e os testes executados no pipeline e nos resultados dos testes são publicados com a tarefa Publicar Resultados do Teste .
  • Compilar e testar com um Dockerfile em várias fases: as compilações e os testes são executados dentro do contentor com um ficheiro docker de várias fases, uma vez que tais resultados de teste não são publicados novamente no pipeline.
  • Compilar, testar e publicar resultados com um Dockerfile: as compilações e os testes são executados dentro do contentor e os resultados são publicados novamente no pipeline. Veja o exemplo abaixo.

Criar, testar e publicar resultados com um ficheiro do Docker

Nesta abordagem, vai criar o código e executar testes no contentor com um ficheiro do Docker. Em seguida, os resultados do teste são copiados para o anfitrião a publicar no pipeline. Para publicar os resultados do teste nos Pipelines do Azure, pode utilizar a tarefa Publicar Resultados do Teste . A imagem final será publicada no Docker ou Azure Container Registry.

Obter o código
  1. Crie um Dockerfile.build ficheiro na raiz do diretório do projeto com o seguinte:

    # 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
    

    Este ficheiro contém as instruções para criar código e executar testes. Em seguida, os testes são copiados para um ficheiro testresults.trx dentro do contentor.

  2. Para tornar a imagem final o mais pequena possível, contendo apenas o runtime e os artefactos de implementação, substitua o conteúdo do existente Dockerfile pelo seguinte:

    # 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"]
    
Definir o pipeline de compilação
  1. Se tiver uma conta Docker Hub e quiser enviar a imagem para o registo do Docker, substitua o conteúdo do .vsts-ci.docker.yml ficheiro pelo seguinte:

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

    Em alternativa, se configurar uma Azure Container Registry e quiser enviar a imagem para esse registo, substitua o conteúdo do .vsts-ci.yml ficheiro pelo seguinte:

    # 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. Envie a alteração para o ramo principal no seu repositório.

  3. Se utilizar Azure Container Registry, certifique-se de que criou previamente o registo no portal do Azure. Copie o nome de utilizador administrador e a palavra-passe apresentados na secção Chaves de acesso das definições do registo no portal do Azure.

  4. Atualize o pipeline de compilação com o seguinte

    • Conjunto de agentes: Hosted Ubuntu 1604
      • dockerId: defina o valor para o ID do Docker para o DockerHub ou o nome de utilizador do administrador para Azure Container Registry.
      • dockerPassword: defina o valor para a sua palavra-passe para o DockerHub ou para a palavra-passe de administrador Azure Container Registry.
    • Caminho do ficheiro YAML: /.vsts-ci.docker.yml
  5. Coloque em fila uma nova compilação e watch criar e enviar uma imagem do Docker para o seu registo e os resultados dos testes para o Azure DevOps.

Requisitos

Requisito Description
Tipos de pipeline YAML, Compilação clássica, Versão clássica
É executado em Agente, DeploymentGroup
Exigências Nenhuma
Capacidades Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes na tarefa.
Restrições de comandos Qualquer
Variáveis de tabelas definidas Qualquer
Versão do agente 2.0.0 ou superior
Categoria da tarefa Teste