Publicar Resultados de pruebas tarea

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

Nota:

En Microsoft Team Foundation Server (TFS) 2018 y versiones anteriores, las canalizaciones de compilación y versión se denominan definiciones, las ejecuciones se denominan compilaciones, las conexiones de servicio se denominan puntos de conexión de servicio, las fases se denominan entornos y los trabajos se denominan fases.

Esta tarea publica los resultados de las pruebas en Azure Pipelines o TFS cuando se ejecutan las pruebas para proporcionar una experiencia completa de informes y análisis de pruebas. Puede usar el ejecutor de pruebas de su elección que admita el formato de resultados que necesite. Entre los formatos de resultados admitidos se 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, mientras que tareas como Ant,Maven,Gulp,Grunt,.NET Core y Xcode proporcionan resultados de publicación como una opción dentro de la tarea, o bien compilan bibliotecas como Cobertura y JaCoCo. Si usa cualquiera de estas tareas, no necesita una tarea Publicar Resultados de pruebas en la canalización.

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

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

Abrir la página 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.

Comprobación de los requisitos previos

Si usa un agente Windows auto hospedado, asegúrese de que la máquina tiene instalado este requisito previo:

Peticiones

[none]

Fragmento de código YAML

# Publish Test Results
# Publish test results to Azure Pipelines
- task: PublishTestResults@2
  inputs:
    #testResultsFormat: 'JUnit' # Options: JUnit, NUnit, VSTest, xUnit, cTest
    #testResultsFiles: '**/TEST-*.xml' 
    #searchFolder: '$(System.DefaultWorkingDirectory)' # Optional
    #mergeTestResults: false # Optional
    #failTaskOnFailedTests: false # Optional
    #testRunTitle: # Optional
    #buildPlatform: # Optional
    #buildConfiguration: # Optional
    #publishRunAttachments: true # Optional

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 .

testResultsFormat es un alias para el nombre de entrada testRunner. Varios ejecutores pueden generar los archivos de resultados, no solo un ejecutor específico. Por ejemplo, el formato de resultados de jUnit es compatible con muchos ejecutores y no solo con 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.

Argumentos

Nota:

Las opciones especificadas a continuación se aplican a la versión más reciente de la tarea.

Argumento Descripción
testRunner
Formato del resultado de la prueba
(Obligatorio) Especifique el formato de los archivos de resultados que desea publicar. Se admiten los siguientes formatos:
- - JUnit,NUnit 2,NUnit 3,Visual Studio Test (TRX) y xUnit 2
Valor predeterminado: JUnit
Alias de argumento: testResultsFormat
testResultsFiles
Archivos de resultados de prueba
(Obligatorio) Use esta opción para especificar uno o varios archivos de resultados de pruebas.
- Puede usar un carácter comodín de carpeta única ( ) y caracteres comodín * recursivos ( ** ). Por ejemplo, **/TEST-*.xml busca todos los archivos XML cuyos nombres comienzan por en todos los TEST- subdirectorios. Si usa VSTest como formato de resultado de prueba, el tipo de archivo debe cambiarse .trx a, 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 , o TEST1.xmlTEST2.xmlTEST3.xml .
Valor predeterminado: **/TEST-*.xml
searchFolder
Carpeta de Búsqueda
(Opcional) Carpeta en la que se buscarán los archivos de resultados de la prueba.
Valor predeterminado: $(System.DefaultWorkingDirectory)
mergeTestResults
Resultados de pruebas de combinación
Cuando se selecciona esta opción, los resultados de las pruebas de todos los archivos se notifican en una única ejecución de prueba. Si no se selecciona esta opción, se creará una ejecución de prueba independiente para cada archivo de resultado de prueba.
Nota: Use los resultados de pruebas de combinación para combinar archivos del mismo marco de pruebas para asegurarse de que la asignación y la duración de los resultados se calculan correctamente.
Valor predeterminado: false
failTaskOnFailedTests
Error si hay errores de prueba
(Opcional) Cuando se selecciona, se producirá un error en la tarea si alguna de las pruebas del archivo de resultados está marcada como con errores. El valor predeterminado es false, que simplemente publicará los resultados del archivo de resultados.
Valor predeterminado: false
testRunTitle
Título de la ejecución de prueba
(Opcional) Use esta opción para proporcionar un nombre para la ejecución de pruebas en la que se van a mostrar los resultados. Se pueden usar nombres de variables declarados en la canalización de compilación o versión.
platform
Plataforma de compilación
(Opcional) Plataforma de compilación en la que se debe informar de la ejecución de pruebas.
Por ejemplo, x64 o x86. Si ha definido una variable para la plataforma en la tarea de compilación, úsima aquí.
Alias de argumento: buildPlatform
configuration
Configuración de la compilación
Configuración de compilación en la que se debe informar de la ejecución de pruebas. Por ejemplo, Depurar o Liberar. Si ha definido una variable para la configuración en la tarea de compilación, úsela aquí.
Alias de argumento: buildConfiguration
publishRunAttachments
Upload de resultados de prueba
(Opcional) Cuando se selecciona, la tarea cargará todos los archivos de resultados de la prueba como datos adjuntos a la ejecución de pruebas.
Valor predeterminado: true

Asignación de formatos de resultado

En esta tabla se enumeran los campos notificados en la pestaña Pruebas en 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 Visual Studio Prueba (TRX)
Ejecución de pruebas Título Título de la ejecución de prueba especificado en la tarea
Fecha de inicio /TestRun/Times.Attributes["start"]. Valor
Fecha de finalización /TestRun/Times.Attributes["finaliza"]. Valor
Duration Fecha de finalización: fecha de inicio
Datos adjuntos Consulte la sección compatibilidad con 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"]. Valor
Fecha de inicio /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value o /TestRun/Results/WebTestResult.Attributes["startTime"]. Value o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor
Fecha de finalización /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valor + /TestRun/Results/UnitTestResult.Attributes["duration"]. Value o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valor + /TestRun/Results/WebTestResult.Attributes["duration"]. Value o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valor + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valor
Duración1 /TestRun/Results/UnitTestResult.Attributes["duration"]. Value o /TestRun/Results/WebTestResult.Attributes["duration"]. Value o /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valor
Propietario /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Valor
Resultado Resultado de /TestRun/Results/UnitTestResult.Attributes[""]. 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 Compatibilidad con 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 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"]. Value o /TestRun/Results/WebTestResult.Attributes["computerName"]. Value o /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Valor
Archivo de prueba Almacenamiento /TestRun/TestDefinitions/UnitTest.Attributes[""]. Valor
Priority /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Valor

1 Laduración solo se usa cuando Date started (Fecha de inicio) y Date completed (Fecha de finalización) no están disponibles.

2 El formato de nombre completo 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.

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: la compilación y las pruebas se ejecutan en la canalización y los resultados de las pruebas se publican mediante la tarea Publicar Resultados de pruebas compilación.
  • Compilación y prueba con un Dockerfile de varias fases: la compilación y las pruebas se ejecutan dentro del contenedor mediante un archivo de Docker de varias fases, ya que estos resultados de pruebas no se publican de nuevo en la canalización.
  • Compilar, probar y publicar resultados con un Dockerfile: la compilación y las 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, compila el código y ejecuta pruebas dentro del contenedor mediante un archivo de Docker. A continuación, los resultados de la prueba se copian en el host para publicarse en la canalización. Para publicar los resultados de la Azure Pipelines, puede usar la tarea Publicar Resultados de pruebas prueba. 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, que contiene solo los artefactos de tiempo de ejecución y de implementación, reemplace el contenido del 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 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 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. Inserta el cambio en la rama principal del repositorio.

  3. Si usa Azure Container Registry, asegúrese de que ha creado previamente el registro en el 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 Azure Portal.

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

    • Grupo de agentes:
      • 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 en la contraseña de DockerHub o la contraseña de administrador Azure Container Registry.
    • Ruta de acceso del archivo YAML:
  5. Poner en cola una nueva compilación y verla crear e insertar una imagen de Docker en el registro y los resultados de la prueba para Azure DevOps.

Las compilaciones de YAML aún no están disponibles en TFS.

Compatibilidad con datos 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 formatos siguientes. En el caso de los proyectos públicos, se admiten 2 GB de datos adjuntos totales.

Visual Studio Prueba (TRX)

Ámbito Tipo Ruta de acceso
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 de acceso"]. Valor
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"]. Valor
Resultado de la prueba 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"]. Valor
Resultado de pruebas /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["ruta de acceso"]. Valor o /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes[" ruta deacceso"]. Valor o /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes[" ruta deacceso"]. Valor

NUnit 3

Ámbito Ruta de acceso
Ejecución de pruebas /test-suite/attachments/attachment/filePath
Ejecución de pruebas /test-suite[@type='Assembly']/test-case/attachments/attachment/filePath

Nota:

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

Preguntas más frecuentes

¿Cuál es el límite máximo permitido de FQN?

El límite máximo de FQN es de 512 caracteres.

¿El límite de caracteres de FQN también incluye propiedades y sus valores en el caso de pruebas controladas por datos?

Sí, el límite de caracteres de FQN incluye propiedades y sus valores.

¿Será diferente el FQN para los sub-resultados?

Actualmente, los sub-resultados de las pruebas controladas por datos no se mostrarán en los datos correspondientes.

Ejemplo: Tengo un caso de prueba: Agregar producto al carro Datos 1: Producto = Datos de 2: Producto = Pie

Todos los sub-resultados de prueba publicados solo tendrán el nombre del caso de prueba y los datos de la primera fila.

Código Abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.

Ayuda y soporte técnico