PublishTestResults@2 – Aufgabe "Testergebnisse v2 veröffentlichen"
Veröffentlichen Sie Testergebnisse in Azure Pipelines.
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.
Eingänge
testResultsFormat
-
Testergebnisformat
Eingabealias: testRunner
.
string
. Erforderlich. Zulässige Werte: JUnit
, NUnit
, VSTest
, XUnit
, CTest
. Standardwert: JUnit
.
Gibt das Format der Ergebnissedateien an, die Sie veröffentlichen möchten. Die folgenden Formate werden unterstützt: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) und xUnit 2.
testResultsFiles
-
Testergebnisse
string
. Erforderlich. Standardwert: **/TEST-*.xml
.
Gibt mindestens eine Testergebnisdatei an.
- Sie können einen Einzelordner-Wildcard (
*
) und rekursive Wildcards (**
) verwenden. Beispielsweise sucht**/TEST-*.xml
nach allen XML-Dateien, deren Namen mitTEST-
in allen Unterverzeichnissen beginnen. Wenn VSTest als Testergebnisformat verwendet wird, sollte der Dateityp in.trx
geändert werden, z. B.**/TEST-*.trx
- Mehrere Pfade können durch eine neue Zeile getrennt angegeben werden.
- Darüber hinaus werden Minimatchmusterakzeptiert.
Beispielsweise schließt !TEST[1-3].xml
Dateien mit dem Namen TEST1.xml
, TEST2.xml
oder TEST3.xml
aus.
searchFolder
-
Suchordner
string
. Standardwert: $(System.DefaultWorkingDirectory)
.
Wahlfrei. Gibt den Ordner an, der nach den Testergebnisdateien gesucht werden soll.
mergeTestResults
-
Zusammenführen von Testergebnissen
boolean
. Standardwert: false
.
Wenn der Wert dieses booleschen Werts true
ist, werden die Testergebnisse aller Dateien anhand eines einzelnen Testlaufsgemeldet. Wenn der Wert false
ist, erstellt die Aufgabe für jede Testergebnisdatei eine separate Testausführung. Um eine bessere Leistung zu erzielen, werden die Ergebnisse immer in einer einzigen Ausführung zusammengeführt, wenn mehr als 100 Ergebnisdateien vorhanden sind, auch wenn diese Option auf false
festgelegt ist.
Hinweis
Verwenden Sie die Einstellung zum Zusammenführen von Testergebnissen, um Dateien aus demselben Testframework zu kombinieren, um sicherzustellen, dass die Ergebniszuordnung und -dauer korrekt berechnet werden.
failTaskOnFailedTests
-
Fehlschlagen, wenn testfehler
boolean
. Standardwert: false
.
Wahlfrei. Wenn der Wert dieses booleschen Werts true
ist, schlägt die Aufgabe fehl, wenn eines der Tests in der Ergebnisdatei als fehlgeschlagen gekennzeichnet ist. Der Standardwert ist false
, wodurch einfach die Ergebnisse aus der Ergebnisdatei veröffentlicht werden.
failTaskOnFailureToPublishResults
-
Fehlschlagen, wenn beim Veröffentlichen von Testergebnissen fehler
boolean
. Standardwert: false
.
Wenn true
, schlägt die Aufgabe fehl, wenn beim Veröffentlichen von Testergebnissen ein Fehler auftritt.
failTaskOnMissingResultsFile
-
Fehler, wenn keine Ergebnisdateien gefunden werden
boolean
. Standardwert: false
.
Schlägt die Aufgabe fehl, wenn keine Ergebnisdateien gefunden werden.
testRunTitle
-
Titel der Testausführung
string
.
Wahlfrei. Gibt einen Namen für die Testausführung an, für die die Ergebnisse gemeldet werden. Variablennamen, die in der Build- oder Releasepipeline deklariert sind, können verwendet werden.
buildPlatform
-
Build platform
Eingabealias: platform
.
string
.
Wahlfrei. Gibt die Buildplattform an, für die die Testausführung gemeldet werden soll. Beispiel: x64
oder x86
. Wenn Sie eine Variable für die Plattform in Ihrer Buildaufgabe definiert haben, verwenden Sie sie hier.
buildConfiguration
-
Buildkonfiguration
Eingabealias: configuration
.
string
.
Wahlfrei. Gibt die Buildkonfiguration an, für die die Testausführung gemeldet werden soll. Beispiel: Debug
oder Release
. Wenn Sie eine Variable für die Konfiguration in Ihrer Buildaufgabe definiert haben, verwenden Sie sie hier.
publishRunAttachments
-
Hochladen von Testergebnissen
boolean
. Standardwert: true
.
Wahlfrei. Wenn der Wert dieses booleschen Werts true
ist, lädt die Aufgabe alle Testergebnisdateien als Anlagen in die Testausführung hoch.
Aufgabensteuerungsoptionen
Alle Aufgaben verfügen zusätzlich zu ihren Aufgabeneingaben über Steuerungsoptionen. Weitere Informationen finden Sie unter Steuerelementoptionen und allgemeinen Aufgabeneigenschaften.
Ausgabevariablen
Keiner.
Bemerkungen
Diese Aufgabe veröffentlicht Testergebnisse in Azure Pipelines oder TFS, wenn Tests ausgeführt werden, um eine umfassende Testberichterstattung und Analyseerfahrung bereitzustellen. Sie können den Testläufer Ihrer Wahl verwenden, der das gewünschte Ergebnisformat unterstützt. Unterstützte Ergebnisformate sind CTest, JUnit (einschließlich PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) und xUnit 2.
Andere integrierte Aufgaben wie Visual Studio Test-Aufgabe und Dot NetCore CLI-Aufgabe testergebnisse automatisch in der Pipeline veröffentlichen. Aufgaben wie Ant, Maven, Gulp, Gruntund Xcode Veröffentlichungsergebnisse als Option innerhalb der Aufgabe oder Erstellen von Bibliotheken wie Cobertura und JaCoCo. Wenn Sie eine dieser Aufgaben verwenden, benötigen Sie keine separate Aufgabe "Testergebnisse veröffentlichen" Aufgabe in der Pipeline.
Die veröffentlichten Testergebnisse werden auf der Registerkarte Tests in der Pipelinezusammenfassung angezeigt. Die Ergebnisse helfen Ihnen, die Pipelinequalität zu messen, die Rückverfolgbarkeit zu überprüfen, Fehler zu beheben und den Besitz von Laufwerksfehlern zu steuern.
Das folgende Beispiel zeigt, dass die Aufgabe für die Veröffentlichung von Testergebnissen konfiguriert ist.
Sie können diese Aufgabe auch in einer Buildpipeline verwenden, um Codeabdeckungsergebnisse zu veröffentlichen, die beim Ausführen von Tests an Azure Pipelines oder TFS erstellt werden, um Die Abdeckungsberichte zu erhalten.
Voraussetzungen
Wenn Sie einen selbst gehosteten Windows-Agent verwenden, muss auf Ihrem Computer die folgende Voraussetzung installiert sein:
- .NET Framework 4.6.2 oder höher
Standardaufgaben
Die Standardoption verwendet das JUnit-Format, um Testergebnisse zu veröffentlichen. Bei Verwendung von VSTest als testRunner-sollte die option testResultsFiles in **/TEST-*.trx
geändert werden.
testResultsFormat- ist ein Alias für den eingabenamen testRunner. Die Ergebnisdateien können von mehreren Läufern erstellt werden, nicht nur von einem bestimmten Läufer. Beispielsweise wird das jUnit-Ergebnisformat von vielen Läufern und nicht nur jUnit unterstützt.
Informationen zum Veröffentlichen von Testergebnissen für Python mithilfe von YAML finden Sie unter Python- im Abschnitt Ökosysteme dieser Themen, die auch Beispiele für andere Sprachen enthalten.
Zuordnung von Ergebnisformaten
In dieser Tabelle sind die Felder aufgeführt, die auf der Registerkarte Tests in einer Build- oder Versionszusammenfassung und die entsprechende Zuordnung mit den Attributen in den unterstützten Testergebnisformaten angegeben werden.
Umfang | Feld | Visual Studio Test (TRX) |
---|---|---|
Testausführung | Titel | Titel der Testausführung in der Aufgabe angegeben |
Startdatum | /TestRun/Times.Attributes[""]. Wert | |
Abschlussdatum | /TestRun/Times.Attributes[""]. Wert | |
Dauer | Datum abgeschlossen - Startdatum | |
Anlagen | Weitere Informationen finden Sie im Abschnitt Unterstützung von Anlagen weiter unten. | |
Testergebnis | Titel | /TestRun/Results/UnitTestResult.Attributes["testName"]. Value Or /TestRun/Results/WebTestResult.Attributes["testName"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["testName"]. Wert |
Startdatum | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value or /TestRun/Results/WebTestResult.Attributes["startTime"]. Value or /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Wert | |
Abschlussdatum | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Wert + /TestRun/Results/UnitTestResult.Attributes["Dauer"]. Value oder /TestRun/Results/WebTestResult.Attributes["startTime"]. Wert + /TestRun/Results/WebTestResult.Attributes["Dauer"]. Wert oder /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Wert + /TestRun/Results/TestResultAggregation.Attributes["Dauer"]. Wert | |
Dauer | /TestRun/Results/UnitTestResult.Attributes["Dauer"]. Wert oder /TestRun/Results/WebTestResult.Attributes["Dauer"]. Wert oder /TestRun/Results/TestResultAggregation.Attributes["Dauer"]. Wert | |
Besitzer | /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["Name"]. Wert | |
Ergebnis | /TestRun/Results/UnitTestResult.Attributes["Ergebnis"]. Wert oder /TestRun/Results/WebTestResult.Attributes["Ergebnis"]. Wert oder /TestRun/Results/TestResultAggregation.Attributes["Ergebnis"]. Wert | |
Fehlermeldung | /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText oder /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText oder /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText | |
Stapelüberwachung | /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText oder /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText oder /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText | |
Anlagen | Weitere Informationen finden Sie im Abschnitt Unterstützung von Anlagen weiter unten. | |
Konsolenprotokoll | /TestRun/Results/UnitTestResult/Output/StdOut.InnerText oder /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText oder /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText | |
Konsolenfehlerprotokoll | /TestRun/Results/UnitTestResult/Output/StdErr.InnerText oder /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText oder /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText | |
Agentname | /TestRun/Results/UnitTestResult.Attributes["computerName"]. Wert oder /TestRun/Results/WebTestResult.Attributes["computerName"]. Value or /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Wert | |
Testdatei | /TestRun/TestDefinitions/UnitTest.Attributes["Speicher"]. Wert | |
Priorität | /TestRun/TestDefinitions/UnitTest.Attributes["Priorität"]. Wert |
Hinweis
Dauer wird nur verwendet, wenn Datum gestartet und Abgeschlossen nicht verfügbar sind.
Das vollqualifizierte Namensformat für testName- ist Namespace.Testclass.Methodname mit einem Zeichenlimit von 512. Wenn der Test datengesteuert ist und Parameter enthält, enthält der Zeichengrenzwert die Parameter.
Beim Veröffentlichen des Testergebnisses wird möglicherweise dieser Fehler angezeigt: Fehler beim Veröffentlichen von Testergebnissen: Ungültige Priorität angegeben
Dieser Fehler tritt auf, wenn eine der Testmethoden vorrang vor 255 hat, die Priorität der Testmethode im Code beheben und die Tests erneut ausführen. Sie können die generierte TRX-Datei überprüfen, um alle Tests mit einer Priorität von mehr als 255 anzuzeigen.
Unterstützung von Anlagen
Die Aufgabe "Testergebnisse veröffentlichen" bietet Unterstützung für Anlagen für Testausführungen und Testergebnisse für die folgenden Formate. Für öffentliche Projekte unterstützen wir 2 GB Gesamtanlagen.
Visual Studio Test (TRX)
Umfang | Typ | Pfad |
---|---|---|
Testausführung | Datensammler | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wert |
Testergebnis | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["Pfad"]. Wert | |
Codeabdeckung | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Wert und /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Wert | |
Testergebnis | Datensammler | /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wert oder /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wert oder /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wert |
Testergebnis | /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["Pfad"]. Wert oder /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["Pfad"]. Value or /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Wert |
Hinweis
Die Option zum Hochladen der Testergebnisdatei als Anlage ist eine Standardoption in der Aufgabe, die für alle Formate gilt.
Beispiele
Docker
Für Docker-basierte Apps gibt es viele Möglichkeiten, Ihre Anwendung zu erstellen und Tests auszuführen:
- Erstellen und Testen in einer Buildpipeline: Builds und Tests, die in der Pipeline ausgeführt werden, und Testergebnisse werden mit der aufgabe Veröffentlichen von Testergebnissen veröffentlicht.
- Erstellen und Testen mit einer mehrstufigen Dockerfile-: Builds und Tests werden innerhalb des Containers mithilfe einer mehrstufigen Docker-Datei ausgeführt, da testergebnisse nicht wieder in der Pipeline veröffentlicht werden.
- Erstellen, Testen und Veröffentlichen von Ergebnissen mit einer Dockerfile-: Builds und Tests, die im Container ausgeführt werden, und Ergebnisse werden wieder in der Pipeline veröffentlicht. Sehen Sie sich das folgende Beispiel an.
Erstellen, Testen und Veröffentlichen von Ergebnissen mit einer Docker-Datei
Bei diesem Ansatz erstellen Sie Ihren Code und führen Tests innerhalb des Containers mithilfe einer Docker-Datei aus. Die Testergebnisse werden dann auf den Host kopiert, der in der Pipeline veröffentlicht werden soll. Um die Testergebnisse in Azure Pipelines zu veröffentlichen, können Sie die aufgabe "Testergebnisse veröffentlichen" verwenden. Das endgültige Image wird in Docker oder Azure Container Registry veröffentlicht.
Code abrufen
Erstellen Sie eine
Dockerfile.build
Datei im Stammverzeichnis Ihres Projektverzeichnisses mit folgendem Code:# 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
Diese Datei enthält die Anweisungen zum Erstellen von Code und Ausführen von Tests. Die Tests werden dann in eine Datei
testresults.trx
innerhalb des Containers kopiert.Um das endgültige Image so klein wie möglich zu machen, das nur die Laufzeit- und Bereitstellungsartefakte enthält, ersetzen Sie den Inhalt der vorhandenen
Dockerfile
durch Folgendes:# 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"]
Definieren der Buildpipeline
Wenn Sie über ein Docker Hub-Konto verfügen und das Image an Ihre Docker-Registrierung übertragen möchten, ersetzen Sie den Inhalt der
.vsts-ci.docker.yml
Datei durch Folgendes:# 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)
Wenn Sie eine Azure Container-Registrierung konfigurieren und das Image an diese Registrierung übertragen möchten, ersetzen Sie den Inhalt der
.vsts-ci.yml
Datei durch Folgendes:# 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)
Pushen Sie die Änderung an den Hauptzweig in Ihrem Repository.
Wenn Sie Azure Container Registry verwenden, stellen Sie sicher, dass Sie im Azure-Portal die Registrierung vorab erstellt haben. Kopieren Sie den Benutzernamen und das Kennwort des Administrators, der im Abschnitt Zugriffstasten abschnitt der Registrierungseinstellungen im Azure-Portal angezeigt wird.
Aktualisieren Der Buildpipeline mit den folgenden Schritten
-
Agentpool-:
Hosted Ubuntu 1604
- dockerId: Legen Sie den Wert auf Ihre Docker-ID für DockerHub oder den Administratorbenutzernamen für Azure Container Registry fest.
- dockerPassword: Legen Sie den Wert auf Ihr Kennwort für DockerHub oder das Administratorkennwort Azure Container Registry fest.
-
YAML-Dateipfad:
/.vsts-ci.docker.yml
-
Agentpool-:
Stellen Sie einen neuen Build in die Warteschlange, und schauen Sie sich an, wie ein Docker-Image erstellt und an Ihre Registrierung übertragen wird, und die Testergebnisse an Azure DevOps.
Anforderungen
Anforderung | BESCHREIBUNG |
---|---|
Pipelinetypen | YAML, Classic Build, Classic Release |
Läuft auf | Agent, DeploymentGroup |
Anforderungen | Nichts |
Funktionen | Dieser Vorgang erfüllt keine Anforderungen für nachfolgende Vorgänge im Auftrag. |
Befehlseinschränkungen | Jegliche |
Settable-Variablen | Jegliche |
Agentversion | 2.0.0 oder höher |
Vorgangskategorie | Testen |