PublishTestResults@2: tarea Publicar resultados de pruebas v2

Publique los resultados de las pruebas en Azure Pipelines.

Publicar resultados de pruebas en 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 - Formato de resultado de la prueba
Alias de entrada: testRunner. string. Obligatorio. Valores permitidos: JUnit, NUnit, VSTest, XUnit, . CTest Valor predeterminado: JUnit.

Especifica el formato de los archivos de resultados que desea publicar. Se admiten los siguientes formatos: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) y xUnit 2.


testResultsFormat - Formato de resultado de la prueba
Alias de entrada: testRunner. string. Obligatorio. Valores permitidos: JUnit, NUnit, VSTest, XUnit. Valor predeterminado: JUnit.

Especifica el formato de los archivos de resultados que desea publicar. Se admiten los siguientes formatos: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) y xUnit 2.


testResultsFiles - Archivos de resultados de pruebas
string. Obligatorio. Valor predeterminado: **/TEST-*.xml.

Especifica uno o varios archivos de resultados de prueba.

  • Puede usar un carácter comodín de carpeta única (*) y caracteres comodín recursivos (**). Por ejemplo, **/TEST-*.xml busca todos los archivos XML cuyo nombre comience por TEST- en todos los subdirectorios. Si usa VSTest como formato de resultados de las pruebas, el tipo de archivo debe cambiarse por .trx, por ejemplo, **/TEST-*.trx.
  • Se pueden especificar varias rutas de acceso, separadas por una nueva línea.
  • Además, acepta patrones de minimatch.

Por ejemplo, !TEST[1-3].xml excluye los archivos denominados TEST1.xml, TEST2.xml o TEST3.xml.


searchFolder - carpeta Búsqueda
string. Valor predeterminado: $(System.DefaultWorkingDirectory).

Opcional. Especifica la carpeta que se va a buscar en los archivos de resultados de la prueba.


mergeTestResults - Combinar resultados de pruebas
boolean. Valor predeterminado: false.

Cuando el valor de este valor booleano es true, la tarea notifica los resultados de la prueba de todos los archivos en una sola ejecución de prueba. Si el valor es false, la tarea crea una ejecución de prueba independiente para cada archivo de resultados de prueba.

Nota

Use la configuración de resultados de la prueba de mezcla para combinar archivos del mismo marco de pruebas para asegurarse de que la asignación de resultados y la duración se calculan correctamente.


failTaskOnFailedTests - Error si hay errores de prueba
boolean. Valor predeterminado: false.

Opcional. Cuando el valor de este valor booleano es true, se producirá un error en la tarea si alguna de las pruebas del archivo de resultados se marca como errónea. El valor predeterminado es false, que simplemente publicará los resultados del archivo de resultados.


failTaskOnFailureToPublishResults - Error si se produce un error en la publicación de los resultados de la prueba
boolean. Valor predeterminado: false.

Cuando true, produce un error en la tarea si se produce un error en la publicación de los resultados de la prueba.


failTaskOnMissingResultsFile - Error si no se encuentra ningún archivo de resultados
boolean. Valor predeterminado: false.

Se produce un error en la tarea si no se encuentra ningún archivo de resultados.


testRunTitle - Título de la ejecución de pruebas
string.

Opcional. Especifica un nombre para la ejecución de pruebas en la que se notificarán los resultados. Se pueden usar nombres de variable declarados en la canalización de compilación o versión.


buildPlatform - Plataforma de compilación
Alias de entrada: platform. string.

Opcional. Especifica la plataforma de compilación en la que se debe notificar la ejecución de pruebas. Por ejemplo: x64 o x86. Si ha definido una variable para la plataforma en la tarea de compilación, úsela aquí.


buildConfiguration - Configuración de compilación
Alias de entrada: configuration. string.

Opcional. Especifica la configuración de compilación con la que se debe notificar la ejecución de pruebas. Por ejemplo: Debug o Release. Si ha definido una variable para la configuración en la tarea de compilación, úsela aquí.


publishRunAttachments - Carga de archivos de resultados de pruebas
boolean. Valor predeterminado: true.

Opcional. Cuando el valor de este valor booleano es true, la tarea carga todos los archivos de resultados de prueba como datos adjuntos a la ejecución de pruebas.


Opciones de control de tareas

Todas las tareas tienen opciones de control además de las entradas de tareas. Para obtener más información, vea Opciones de control y propiedades de tareas comunes.

Variables de salida

Ninguno.

Comentarios

Esta tarea publica los resultados de las pruebas en Azure Pipelines o TFS cuando se ejecutan pruebas para proporcionar una experiencia completa de análisis e informes de pruebas. Puede usar el ejecutor de pruebas que prefiera que admita el formato de resultados que necesita. Entre los formatos admitidos se incluyen CTest, JUnit (incluido PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) y xUnit 2.

Otras tareas integradas, como la tarea prueba de Visual Studio y la tarea de la CLI de Dot NetCore publican automáticamente los resultados de las pruebas en la canalización. Las tareas como Ant, Maven, Gulp, Grunt y Xcode proporcionan resultados de publicación como una opción dentro de la tarea o compilan bibliotecas como Cobertura y JaCoCo. Si usa cualquiera de estas tareas, no necesita una tarea Publicar resultados de pruebas independiente en la canalización.

Los resultados de las pruebas publicadas se muestran en la pestaña Pruebas del resumen de la canalización. Los resultados le ayudan a medir la calidad de la canalización, revisar la rastreabilidad, solucionar problemas de errores e impulsar la propiedad del error.

En el ejemplo siguiente se muestra que la tarea está configurada para publicar los resultados de las pruebas.

Abra la página de historial de pruebas.

También puede usar esta tarea en una canalización de compilación para publicar los resultados de cobertura de código generados al ejecutar pruebas en Azure Pipelines o TFS con el fin de obtener informes de cobertura.

Requisitos previos

Si usa un agente autohospedado de Windows, la máquina debe tener instalado este requisito previo:

Valores predeterminados de la tarea

La opción predeterminada usa el formato JUnit para publicar los resultados de las pruebas. Al usar VSTest como testRunner, la opción testResultsFiles debe cambiarse a **/TEST-*.trx.

testResultsFormat es un alias para el nombre de entrada testRunner. Los archivos de resultados pueden ser generados por varios ejecutores, no solo por uno específico. Por ejemplo, el formato de resultados de jUnit es compatible con muchos ejecutores y no solo jUnit.

Para publicar resultados de pruebas para Python mediante YAML, consulte Python en la sección Ecosistemas de estos temas, que también incluye ejemplos para otros lenguajes.

Asignación de formatos de resultado

En esta tabla se enumeran los campos notificados en la pestaña Pruebas de un resumen de compilación o versión y la asignación correspondiente con los atributos en los formatos de resultados de pruebas admitidos.

Ámbito Campo Prueba de Visual Studio (TRX)
Serie de pruebas Título Título de la serie de pruebas especificado en la tarea
Fecha de inicio /TestRun/Times.Attributes["start"].Value
Fecha de finalización /TestRun/Times.Attributes["finish"].Value
Duration Fecha de finalización - Fecha de inicio
Datos adjuntos Consulte la sección Compatibilidad con los datos adjuntos a continuación.
Resultado de la prueba Título /TestRun/Results/UnitTestResult.Attributes["testName"].Value o /TestRun/Results/WebTestResult.Attributes["testName"].Value o /TestRun/Results/TestResultAggregation.Attributes["testName"].Value
Fecha de inicio /TestRun/Results/UnitTestResult.Attributes["startTime"].Value o /TestRun/Results/WebTestResult.Attributes["startTime"].Value o /TestRun/Results/TestResultAggregation.Attributes["startTime"].Value
Fecha de finalización /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"].Value
Duration /TestRun/Results/UnitTestResult.Attributes["duration"].Value o /TestRun/Results/WebTestResult.Attributes["duration"].Value o /TestRun/Results/TestResultAggregation.Attributes["duration"].Value
Propietario /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"].Value
Resultado /TestRun/Results/UnitTestResult.Attributes["outcome"].Value o /TestRun/Results/WebTestResult.Attributes["outcome"].Value o /TestRun/Results/TestResultAggregation.Attributes["outcome"].Value
Mensaje de error /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText o /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText o /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
Seguimiento de la pila /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText o /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText o /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
Datos adjuntos Consulte la sección Compatibilidad con los datos adjuntos a continuación.
Registro de consola /TestRun/Results/UnitTestResult/Output/StdOut.InnerText o /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText o /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Registro de errores de consola /TestRun/Results/UnitTestResult/Output/StdErr.InnerText o /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText o /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Nombre del agente /TestRun/Results/UnitTestResult.Attributes["computerName"].Value o /TestRun/Results/WebTestResult.Attributes["computerName"].Value o /TestRun/Results/TestResultAggregation.Attributes["computerName"].Value
Archivo de prueba /TestRun/TestDefinitions/UnitTest.Attributes["storage"].Value
Priority /TestRun/TestDefinitions/UnitTest.Attributes["priority"].Value

Nota

Duration solo se usa cuando Date started y Date completed no están disponibles.

El formato de nombre completo para testName es Namespace.Testclass.Methodname con un límite de caracteres de 512. Si la prueba está controlada por datos y tiene parámetros, el límite de caracteres incluirá los parámetros.

Al publicar el resultado de la prueba, puede obtener este error: No se pudieron publicar los resultados de la prueba: Prioridad no válida especificada

Este error se produce si alguno de los métodos de prueba tiene una prioridad establecida por encima de 255, corrija la prioridad del método de prueba en el código y vuelva a ejecutar las pruebas. Puede revisar el archivo trx generado para ver todas las pruebas que tienen prioridad superior a 255.

Compatibilidad con los datos adjuntos

La tarea Publicar resultados de pruebas proporciona compatibilidad con los datos adjuntos para las series de pruebas y los resultados de las pruebas en los siguientes formatos. En el caso de los proyectos públicos, se admite un total de 2 GB de datos adjuntos.

Prueba de Visual Studio (TRX)

Ámbito Tipo Ruta de acceso
Serie de pruebas Recopilador de datos /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value
Resultado de pruebas /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"].Value
Cobertura de código /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"].Value y /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"].Value
Resultado de las pruebas Recopiladores de datos /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value o/TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value o /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"].Value
Resultado de pruebas /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"].Value o /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"].Value o /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"].Value

Nota

La opción de cargar el archivo de resultados de las pruebas como datos adjuntos es una opción predeterminada en la tarea, aplicable a todos los formatos.

Ejemplos

Docker

En el caso de las aplicaciones basadas en Docker, hay muchas maneras de compilar la aplicación y ejecutar pruebas:

  • Compilación y prueba en una canalización de compilación: las compilaciones y pruebas que se ejecutan en la canalización y los resultados de las pruebas se publican mediante la tarea Publicar resultados de pruebas.
  • Compilación y prueba con un Dockerfile de varias fases: las compilaciones y pruebas se ejecutan dentro del contenedor mediante un archivo docker de varias fases, por lo que los resultados de las pruebas no se vuelven a publicar en la canalización.
  • Compilar, probar y publicar resultados con un Dockerfile: las compilaciones y pruebas se ejecutan dentro del contenedor y los resultados se publican de nuevo en la canalización. Observe el ejemplo siguiente.

Compilación, prueba y publicación de resultados con un archivo de Docker

En este enfoque, compilará el código y ejecutará pruebas dentro del contenedor mediante un archivo de Docker. A continuación, los resultados de la prueba se copiarán en el host para la publicación en la canalización. Para publicar los resultados de las pruebas en Azure Pipelines, puede usar la tarea Publicar resultados de pruebas. La imagen final se publicará en Docker o Azure Container Registry.

Obtención del código
  1. Cree un archivo Dockerfile.build en la raíz del directorio del proyecto con lo siguiente:

    # 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 archivo contiene las instrucciones para compilar código y ejecutar pruebas. A continuación, las pruebas se copian en un archivo testresults.trx dentro del contenedor.

  2. Para que la imagen final sea lo más pequeña posible, que contenga solo los artefactos de tiempo de ejecución e implementación, reemplace el contenido del Dockerfile existente por lo siguiente:

    # 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"]
    
Definición de la canalización de compilación
  1. Si tiene una cuenta de Docker Hub y desea insertar la imagen en el registro de Docker, reemplace el contenido del archivo .vsts-ci.docker.yml por lo siguiente:

    # 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, si configura una instancia de Azure Container Registry y desea insertar la imagen en ese registro, reemplace el contenido del archivo .vsts-ci.yml por lo siguiente:

    # 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. Inserte el cambio en la rama principal del repositorio.

  3. Si usa Azure Container Registry, asegúrese de haber creado previamente el registro en Azure Portal. Copie el nombre de usuario administrador y la contraseña que se muestran en la sección Claves de acceso de la configuración del Registro en Azure Portal.

  4. Actualice la canalización de compilación con lo siguiente:

    • Grupo de agentes: Hosted Ubuntu 1604
      • dockerId: establezca el valor en el identificador de Docker para DockerHub o el nombre de usuario administrador de Azure Container Registry.
      • dockerPassword: establezca el valor en la contraseña de DockerHub o la contraseña de administrador de Azure Container Registry.
    • Ruta de acceso a los archivos YAML: /.vsts-ci.docker.yml
  5. Ponga en cola una nueva compilación y observe que crea e inserta una imagen de Docker en el registro y los resultados de las pruebas en Azure DevOps.

Requisitos

Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
Peticiones None
Capabilities Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
Restricciones de comandos Any
Variables que se pueden establecer Any
Versión del agente 2.0.0 o superior
Categoría de la tarea: Prueba