Compartir a través de


PublishTestResults@2 - Tarea Publicar resultados de pruebas v2

Publique los resultados de las pruebas en Azure Pipelines.

Sintaxis

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

Entradas

testResultsFormat - Formato de los resultados 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.

Sugerencia

VSTest format se refiere al formato TRX. Por lo tanto, también funciona si está produciendo TRX con Microsoft.Testing.Platform (MTP) y no es específico de VSTest. El valor es VSTest por razones históricas, antes de la introducción de MTP.


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 una sola carpeta (*) y caracteres comodín recursivos (**). Por ejemplo, **/TEST-*.xml busca todos los archivos XML cuyos nombres comienzan por TEST- en todos los subdirectorios. Si usa VSTest como formato de resultado de la prueba, el tipo de archivo debe cambiarse a .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.xmlo TEST3.xml.


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

Opcional. Especifica la carpeta en la que se van a buscar los archivos de resultados de las pruebas.


mergeTestResults - Resultados de las pruebas de combinación
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 de . Si el valor es false, la tarea crea una ejecución de prueba independiente para cada archivo de resultados de prueba. Para optimizar el rendimiento, los resultados siempre se combinarán en una sola ejecución si hay más de 100 archivos de resultados, incluso si esta opción está establecida en false.

Nota:

Use la configuración de resultados de la prueba de combinación 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 fallida. El valor predeterminado es false, que simplemente publicará los resultados desde el archivo de resultados.


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

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


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

Falla la tarea si no se encuentra ningún archivo de resultados.


testRunTitle - título de 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 - Construir plataforma
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 definió una variable para la configuración en la tarea de compilación, úsela aquí.


publishRunAttachments - Cargar 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 la 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 sus entradas de tarea. Para obtener más información, consulte Opciones de control y propiedades de tareas comunes.

Variables de salida

Ninguno.

Observaciones

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

Otras tareas integradas, como la tarea de 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. Tareas como Ant, Maven, Gulp, Grunt y Xcode proporcionan resultados de publicación como una opción dentro de la tarea, o crean bibliotecas como Cobertura y JaCoCo. Si usa alguna 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 tubería, revisar la trazabilidad, solucionar errores e impulsar la propiedad de errores.

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

Abrir la página del 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 para obtener informes de cobertura.

Prerrequisitos

Si usa un agente autohospedado de Windows, el equipo debe tener instalado este requisito previo:

Valores predeterminados de las tareas

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

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

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

Mapeo de formatos de resultados

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 prueba admitidos.

Ámbito Campo Prueba de Visual Studio (TRX)
Ejecución de prueba Título Título de ejecución de prueba especificado en la tarea
Fecha de inicio /TestRun/Times.Attributes["inicio"]. Valor
Fecha de finalización /TestRun/Times.Attributes["finalizar"]. Valor
Duración Fecha de finalización - Fecha de inicio
Datos adjuntos Consulte la sección de soporte de archivos adjuntos a continuación
Resultado de la prueba Título /TestRun/Results/UnitTestResult.Attributes["testName"]. Valor o /TestRun/Results/WebTestResult.Attributes["testName"]. Valor o /TestRun/Results/TestResultAggregation.Attributes["testName"]. Valor
Fecha de inicio /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valor o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valor o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor
Fecha de finalización /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valor + /TestRun/Results/UnitTestResult.Attributes["duration"]. Valor o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valor + /TestRun/Results/WebTestResult.Attributes["duration"]. Valor o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valor
Duración /TestRun/Results/UnitTestResult.Attributes["duration"]. Valor o /TestRun/Results/WebTestResult.Attributes["duration"]. Valor o /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valor
Propietario /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["nombre"]. Valor
Resultado /TestRun/Results/UnitTestResult.Attributes["resultado"]. Valor o /TestRun/Results/WebTestResult.Attributes["resultado"]. Valor o /TestRun/Results/TestResultAggregation.Attributes["resultado"]. Valor
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 de soporte de archivos adjuntos a continuación
Registro de la 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 la 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"]. Valor o /TestRun/Results/WebTestResult.Attributes["computerName"]. Valor o /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Valor
Archivo de prueba /TestRun/TestDefinitions/UnitTest.Attributes["almacenamiento"]. Valor
Prioridad /TestRun/TestDefinitions/UnitTest.Attributes["prioridad"]. Valor

Nota:

La duración solo se utiliza cuando la fecha de inicio y lafecha de finalización 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á basada en datos y tiene parámetros, el límite de caracteres incluirá los parámetros.

Al publicar el resultado de la prueba, es posible que obtenga este error: No se pudieron publicar los resultados de la prueba: se especificó una prioridad no válida

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 archivos adjuntos

La tarea Publicar resultados de pruebas proporciona compatibilidad con datos adjuntos tanto para la ejecución de pruebas como para los resultados de pruebas para los siguientes formatos. En el caso de los proyectos públicos, se admiten 2 GB de archivos adjuntos en total.

Prueba de Visual Studio (TRX)

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

Nota:

La opción de cargar el archivo de resultados de la prueba como archivo adjunto es una opción predeterminada en la tarea, aplicable a todos los formatos.

Ejemplos

Estibador

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

  • Compilar y probar en una canalización de compilación: las compilaciones y las pruebas se ejecutan en la canalización y los resultados de las pruebas se publican mediante la tarea Publicar resultados de pruebas .
  • Compile y pruebe con un Dockerfile de varias etapas: las compilaciones y las pruebas se ejecutan dentro del contenedor mediante un archivo Docker de varias etapas, ya que los resultados de las pruebas no se vuelven a publicar en la canalización.
  • Compile, pruebe y publique resultados con un Dockerfile: las compilaciones y las pruebas se ejecutan dentro del contenedor y los resultados se vuelven a publicar en la canalización. Consulte el ejemplo siguiente.

Compile, pruebe y publique resultados con un archivo de Docker

En este enfoque, se compila el código y se ejecutan pruebas dentro del contenedor mediante un archivo de Docker. A continuación, los resultados de las pruebas se copian en el host para publicarlos 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 Dockerfile.build archivo 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, conteniendo solo el tiempo de ejecución y los artefactos de implementación, reemplace el contenido de la existente Dockerfile 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 .vsts-ci.docker.yml archivo 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 .vsts-ci.yml archivo 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. Envía el cambio a la rama principal de tu repositorio.

  3. Si usa Azure Container Registry, asegúrese de haber creado previamente el registro en Azure Portal. Copie el nombre de usuario y la contraseña de administrador 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 en el nombre de usuario administrador de Azure Container Registry.
      • dockerPassword: establezca el valor de la contraseña de DockerHub o la contraseña de administrador de Azure Container Registry.
    • Ruta del archivo YAML: /.vsts-ci.docker.yml
  5. Ponga en cola una nueva compilación y observe cómo 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
demandas Ninguno
Capacidades Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
restricciones de comandos Cualquiera
variables settable Cualquiera
Versión del agente 2.0.0 o superior
Categoría de tarea Prueba