Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Publique resultados de teste no Azure Pipelines.
Sintaxe
# 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.
Insumos
testResultsFormat
-
Formato do resultado do teste
Alias de entrada: testRunner.
string. Obrigatório. Valores permitidos: JUnit, NUnit, VSTest, XUnit, CTest. Valor padrão: JUnit.
Especifica o formato dos arquivos de resultados que você deseja publicar. Os seguintes formatos são suportados: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.
Sugestão
VSTest refere-se ao formato TRX. Portanto, ele também funciona se você estiver produzindo TRX com Microsoft.Testing.Platform (MTP) e não é específico para VSTest. O valor é VSTest por razões históricas, antes da introdução do MTP.
testResultsFiles
-
Arquivos de resultados de teste
string. Obrigatório. Valor padrão: **/TEST-*.xml.
Especifica um ou mais arquivos de resultados de teste.
- Você pode usar um curinga de pasta única (
*) e curingas recursivos (**). Por exemplo,**/TEST-*.xmlprocura todos os arquivos XML cujos nomes começam comTEST-em todos os subdiretórios. Se usar VSTest como o formato de resultado do teste, o tipo de arquivo deve ser alterado para.trxpor exemplo,**/TEST-*.trx - Vários caminhos podem ser especificados, separados por uma nova linha.
- Além disso, aceita padrões de minimatch.
Por exemplo, !TEST[1-3].xml exclui arquivos chamados TEST1.xml, TEST2.xmlou TEST3.xml.
searchFolder
-
Pasta de pesquisa
string. Valor padrão: $(System.DefaultWorkingDirectory).
Opcional. Especifica a pasta para procurar os arquivos de resultado do teste.
mergeTestResults
-
Mesclar resultados de teste
boolean. Valor padrão: false.
Quando o valor desse booleano é true, a tarefa relata os resultados do teste de todos os arquivos em relação a um único teste executado. Se o valor for false, a tarefa criará uma execução de teste separada para cada arquivo de resultado de teste. Para otimizar para um melhor desempenho, os resultados serão sempre mesclados em uma única execução se houver mais de 100 arquivos de resultados, mesmo que essa opção esteja definida como false.
Observação
Use a configuração de resultados do teste de mesclagem para combinar arquivos da mesma estrutura de teste para garantir que o mapeamento e a duração dos resultados sejam calculados corretamente.
failTaskOnFailedTests
-
Falhar se houver falhas de teste
boolean. Valor padrão: false.
Opcional. Quando o valor deste booleano é true, a tarefa falhará se qualquer um dos testes no arquivo de resultados for marcado como falha. O padrão é false, que simplesmente publicará os resultados do arquivo de resultados.
failTaskOnFailureToPublishResults
-
Reprovar se houver falha na publicação dos resultados do teste
boolean. Valor padrão: false.
Quando true, falha na tarefa se houver falha na publicação dos resultados do teste.
failTaskOnMissingResultsFile
-
Falha se nenhum arquivo de resultado for encontrado
boolean. Valor padrão: false.
Falha na tarefa se nenhum arquivo de resultado for encontrado.
testRunTitle
-
Título da execução de teste
string.
Opcional. Especifica um nome para a execução do teste em relação ao qual os resultados serão relatados. Nomes de variáveis declarados no pipeline de compilação ou liberação podem ser usados.
buildPlatform
-
Construir plataforma
Alias de entrada: platform.
string.
Opcional. Especifica a plataforma de compilação em relação à qual a execução de teste deve ser relatada. Por exemplo: x64 ou x86. Se você definiu uma variável para a plataforma em sua tarefa de compilação, use-a aqui.
buildConfiguration
-
de configuração de 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 relatada. Por exemplo: Debug ou Release. Se você definiu uma variável para a configuração em sua tarefa de compilação, use-a aqui.
publishRunAttachments
-
Carregar ficheiros de resultados de testes
boolean. Valor padrão: true.
Opcional. Quando o valor deste booleano é true, a tarefa carrega todos os arquivos de resultado do teste como anexos para a execução do teste.
Opções de controlo de tarefas
Todas as tarefas têm opções de controle, além de suas entradas de tarefas. Para obter mais informações, consulte Opções de controle de e propriedades de tarefas comuns.
Variáveis de saída
Nenhum.
Observações
Esta tarefa publica os resultados do teste no Azure Pipelines ou no TFS quando os testes são executados para fornecer uma experiência abrangente de relatórios e análises de teste. Você pode usar o executor de teste de sua escolha que suporta o formato de resultados que você precisa. Os formatos de resultados suportados incluem CTest, JUnit (incluindo PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.
Outras tarefas internas, como de tarefas de teste do Visual Studio e tarefa Dot NetCore CLI publicar automaticamente os resultados do teste no pipeline. Tarefas como Ant, Maven, Gulp, Grunte Xcode fornecer resultados de publicação como uma opção dentro da tarefa, ou construir bibliotecas como Cobertura e JaCoCo. Se você estiver usando qualquer uma dessas tarefas, não precisará de uma tarefa separada Publicar resultados de teste no pipeline.
Os resultados do teste publicados são exibidos na guia Testes no resumo do pipeline. Os resultados ajudam a medir a qualidade do pipeline, analisar a rastreabilidade, solucionar problemas de falhas e impulsionar a propriedade de falhas.
O exemplo a seguir mostra que a tarefa está configurada para publicar resultados de teste.
Você também pode usar essa tarefa em um pipeline de compilação para publicar resultados de cobertura de código produzidos ao executar testes no Azure Pipelines ou TFS para obter relatórios de cobertura.
Pré-requisitos
Se você estiver usando um agente auto-hospedado do Windows, sua máquina deverá ter este pré-requisito instalado:
- .NET Framework 4.6.2 ou uma versão posterior
Padrões de tarefas
A opção padrão usa o formato JUnit para publicar os resultados do teste. Ao usar o VSTest como o testRunner, a opção testResultsFiles deve ser alterada para **/TEST-*.trx.
testResultsFormat é um alias para o testRunner nome de entrada. Os arquivos 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 por jUnit.
Para publicar resultados de teste para Python usando YAML, consulte Python na seção Ecosystems destes tópicos, que também inclui exemplos para outras linguagens.
Mapeamento de formatos de resultados
Esta tabela lista os campos relatados na guia Testes de em um resumo de compilação ou versão e o mapeamento correspondente com os atributos nos formatos de resultado de teste suportados.
- de teste do Visual Studio (TRX)
- JUnit
- NUnit 2
- NUnit 3
- xUnidade 2
- CTest
| Âmbito de aplicação | Campo | Teste do Visual Studio (TRX) |
|---|---|---|
| Execução de teste | Título | Título da execução de teste especificado na tarefa |
| Data de início | /TestRun/Times.Attributes["iniciar"]. Valor | |
| Data de conclusão | /TestRun/Times.Attributes["concluir"]. Valor | |
| Duração | Data de conclusão - Data de início | |
| Anexos | Consulte seção de suporte a anexos abaixo | |
| Resultado do teste | Título | /TestRun/Results/UnitTestResult.Attributes["testName"]. Valor Ou /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["duração"]. Value Or /TestRun/Results/WebTestResult.Attributes["startTime"]. Valor + /TestRun/Results/WebTestResult.Attributes["duração"]. Valor ou /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor + /TestRun/Results/TestResultAggregation.Attributes["duração"]. Valor | |
| Duração | /TestRun/Results/UnitTestResult.Attributes["duração"]. Value Or /TestRun/Results/WebTestResult.Attributes["duração"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["duração"]. Valor | |
| Proprietário | /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["nome"]. Valor | |
| Resultado | /TestRun/Results/UnitTestResult.Attributes["resultado"]. Value Or /TestRun/Results/WebTestResult.Attributes["resultado"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["resultado"]. 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 | |
| Rastreamento 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 | Consulte seção de suporte a anexos abaixo | |
| Registo da consola | /TestRun/Results/UnitTestResult/Output/ StdOut.InnerText ou /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText ou /TestRun/Results/TestResultAggregation/Output/ StdOut.InnerText | |
| Registo de erros da consola | /TestRun/Results/UnitTestResult/Output/ StdErr.InnerText ou /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText ou /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["armazenamento"]. Valor | |
| Prioridade | /TestRun/TestDefinitions/UnitTest.Attributes["prioridade"]. Valor |
Observação
Duração é usada somente quando Data de início e Data concluída não estão disponíveis.
O formato de nome totalmente qualificado para testName é Namespace.Testclass.Methodname com um limite de caracteres de 512. Se o teste for orientado por dados e tiver parâmetros, o limite de caracteres incluirá os parâmetros.
Ao publicar o resultado do teste, você pode receber este erro: Falha ao publicar os resultados do teste: Prioridade inválida especificada
Este erro ocorre se qualquer um dos métodos de teste tiver prioridade definida acima de 255, corrija a prioridade do método de teste no código e execute os testes novamente. Você pode revisar o arquivo trx gerado para ver todos os testes com prioridade maior que 255.
Suporte a anexos
A tarefa Publicar Resultados do Teste fornece suporte para anexos para execução de teste e resultados de teste para os seguintes formatos. Para projetos públicos, suportamos 2GB de anexos totais.
Teste do Visual Studio (TRX)
| Âmbito de aplicação | Tipo | Caminho |
|---|---|---|
| Execução de teste | Coletor de dados | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valor |
| Resultado do teste | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["caminho"]. Valor | |
| Cobertura de código | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Valor e /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Valor | |
| Resultado do teste | Coletores de dados | /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Value Or /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["caminho"]. Value Or /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["caminho"]. Valor ou /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["caminho"]. Valor |
Observação
A opção de carregar o arquivo de resultados do teste como um anexo é uma opção padrão na tarefa, aplicável a todos os formatos.
Exemplos
Docker
Para aplicativos baseados no Docker, há muitas maneiras de criar seu aplicativo e executar testes:
- Compilar e testar em um pipeline de compilação: compilações e testes são executados no pipeline e os resultados do teste são publicados usando a tarefa Publicar resultados de teste.
- Compilar e testar com um Dockerfile de vários estágios: compilações e testes são executados dentro do contêiner usando um arquivo Docker de vários estágios, pois os resultados do teste não são publicados de volta ao pipeline.
- Crie, teste e publique resultados com um Dockerfile: compilações e testes são executados dentro do contêiner e os resultados são publicados de volta no pipeline. Veja o exemplo abaixo.
Crie, teste e publique resultados com um arquivo do Docker
Nessa abordagem, você cria seu código e executa testes dentro do contêiner usando um arquivo do Docker. Os resultados do teste são então copiados para o host para serem publicados no pipeline. Para publicar os resultados do teste no Azure Pipelines, você pode usar a tarefa Publicar Resultados de Teste. A imagem final será publicada no Docker ou no Registro de Contêiner do Azure.
Obter o código
Crie um arquivo
Dockerfile.buildna 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.dllEste arquivo contém as instruções para criar código e executar testes. Os testes são então copiados para um arquivo
testresults.trxdentro do contêiner.Para tornar a imagem final o menor possível, contendo apenas os artefatos de tempo de execução e implantação, substitua o conteúdo do
Dockerfileexistente 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
Se você tiver uma conta do Docker Hub e quiser enviar a imagem para o registro do Docker, substitua o conteúdo do arquivo
.vsts-ci.docker.ymlpelo 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)Como alternativa, se você configurar um Registro de Contêiner do Azure e quiser enviar a imagem por push para esse Registro, substitua o conteúdo do arquivo
.vsts-ci.ymlpelo 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)Envie a alteração para a ramificação principal em seu repositório.
Se você usar o Registro de Contêiner do Azure, verifique se pré-criou o do Registro no portal do Azure. Copie o nome de usuário e a senha do administrador mostrados na seção chaves de acesso das configurações do Registro no portal do Azure.
Atualize seu pipeline de compilação com o seguinte
-
Pool de agentes:
Hosted Ubuntu 1604- dockerId: defina o valor para sua ID do Docker para o DockerHub ou o nome de usuário admin para o Registro de Contêiner do Azure.
- dockerPassword: defina o valor para sua senha para o DockerHub ou a senha de administrador do Registro de Contêiner do Azure.
-
do caminho do arquivo YAML :
/.vsts-ci.docker.yml
-
Pool de agentes:
Enfileire uma nova compilação e veja-a criar e enviar por push uma imagem do Docker para o seu registo e os resultados do teste para o Azure DevOps.
Requerimentos
| Requisito | Descrição |
|---|---|
| Tipos de pipeline | YAML, Construção clássica, Versão clássica |
| Funciona em | Agente, DeploymentGroup |
| Exigências | Nenhum |
| Capacidades | Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes no trabalho. |
| Restrições de comando | Qualquer |
| Variáveis configuráveis | Qualquer |
| Versão do agente | 2.0.0 ou superior |
| Categoria de tarefa | Teste |