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.

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:
- .NET Framework 4.6.2 o una versión posterior
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 |
searchFolderCarpeta de Búsqueda |
(Opcional) Carpeta en la que se buscarán los archivos de resultados de la prueba. Valor predeterminado: $(System.DefaultWorkingDirectory) |
mergeTestResultsResultados 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 |
failTaskOnFailedTestsError 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 |
testRunTitleTí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. |
platformPlataforma 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 |
configurationConfiguració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 |
publishRunAttachmentsUpload 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
Cree un
Dockerfile.buildarchivo 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.dllEste archivo contiene las instrucciones para compilar código y ejecutar pruebas. A continuación, las pruebas se copian en un archivo
testresults.trxdentro del contenedor.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
Dockerfilepor 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
Si tiene una cuenta Docker Hub y desea insertar la imagen en el registro de Docker, reemplace el contenido del archivo
.vsts-ci.docker.ymlpor 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.ymlarchivo 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)Inserta el cambio en la rama principal del repositorio.
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.
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:
- Grupo de agentes:
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.
Tareas relacionadas
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
- Vea la guía de solución de problemas
- Obtenga consejos sobre Stack Overflowy obtenga soporte técnico a través de la página developer Community