PublishTestResults@2 — publikowanie wyników testów w wersji 2
Publikowanie wyników testów w usłudze Azure Pipelines.
Publikowanie wyników testu w usłudze Azure Pipelines/TFS.
Składnia
# 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.
Dane wejściowe
testResultsFormat
- Format wyników testu
Alias wejściowy: testRunner
. string
. Wymagane. Dozwolone wartości: JUnit
, , VSTest
NUnit
, XUnit
, CTest
. Wartość domyślna: JUnit
.
Określa format plików wyników, które chcesz opublikować. Obsługiwane są następujące formaty: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) i xUnit 2.
testResultsFormat
- Format wyników testu
Alias wejściowy: testRunner
. string
. Wymagane. Dozwolone wartości: JUnit
, NUnit
, VSTest
, XUnit
. Wartość domyślna: JUnit
.
Określa format plików wyników, które chcesz opublikować. Obsługiwane są następujące formaty: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) i xUnit 2.
testResultsFiles
- Pliki wyników testów
string
. Wymagane. Wartość domyślna: **/TEST-*.xml
.
Określa co najmniej jeden plik wyników testów.
- Można użyć wieloznacznych symboli wieloznacznych z jednym folderem (
*
) i cyklicznych symboli wieloznacznych (**
). Na przykład wyszukuje wszystkie pliki XML,**/TEST-*.xml
których nazwy zaczynają się odTEST-
we wszystkich podkatalogach. Jeśli używasz narzędzia VSTest jako formatu wyników testu, typ pliku należy zmienić na.trx
np.**/TEST-*.trx
- Można określić wiele ścieżek rozdzielonych nowym wierszem.
- Ponadto akceptuje wzorce minimatch.
Na przykład !TEST[1-3].xml
wyklucza pliki o nazwie TEST1.xml
, TEST2.xml
lub TEST3.xml
.
searchFolder
- folder Search
string
. Wartość domyślna: $(System.DefaultWorkingDirectory)
.
Opcjonalny. Określa folder do wyszukiwania plików wyników testów.
mergeTestResults
- Scal wyniki testu
boolean
. Wartość domyślna: false
.
Gdy wartość tego elementu logicznego to true
, zadanie podrzędne zgłasza wyniki testu ze wszystkich plików względem pojedynczego przebiegu testu. Jeśli wartość to false
, zadanie tworzy osobny przebieg testu dla każdego pliku wyników testu.
Uwaga
Użyj ustawienia wyników testu scalania, aby połączyć pliki z tej samej platformy testów, aby upewnić się, że mapowanie wyników i czas trwania są obliczane poprawnie.
failTaskOnFailedTests
- Niepowodzenie, jeśli występują błędy testów
boolean
. Wartość domyślna: false
.
Opcjonalny. Gdy wartość tej wartości logicznej to true
, zadanie zakończy się niepowodzeniem, jeśli którykolwiek z testów w pliku wyników zostanie oznaczony jako niepowodzenie. Wartość domyślna to false
, która po prostu opublikuje wyniki z pliku wyników.
failTaskOnFailureToPublishResults
- Niepowodzenie, jeśli wystąpił błąd podczas publikowania wyników testów
boolean
. Wartość domyślna: false
.
W przypadku true
niepowodzenia zadania w przypadku niepowodzenia publikowania wyników testu.
failTaskOnMissingResultsFile
- Niepowodzenie, jeśli nie znaleziono plików wyników
boolean
. Wartość domyślna: false
.
Nie można wykonać zadania, jeśli nie znaleziono plików wyników.
testRunTitle
- Tytuł przebiegu testu
string
.
Opcjonalny. Określa nazwę przebiegu testu, względem którego będą zgłaszane wyniki. Można użyć nazw zmiennych zadeklarowanych w potoku kompilacji lub wydania.
buildPlatform
- Tworzenie platformy
Alias wejściowy: platform
. string
.
Opcjonalny. Określa platformę kompilacji, dla której ma zostać zgłoszony przebieg testu. Na przykład: x64
lub x86
. Jeśli zdefiniowano zmienną dla platformy w zadaniu kompilacji, użyj jej tutaj.
buildConfiguration
- Konfiguracja kompilacji
Alias wejściowy: configuration
. string
.
Opcjonalny. Określa konfigurację kompilacji, dla której ma zostać zgłoszony przebieg testu. Na przykład: Debug
lub Release
. Jeśli zdefiniowano zmienną dla konfiguracji w zadaniu kompilacji, użyj jej tutaj.
publishRunAttachments
- Przekazywanie plików wyników testów
boolean
. Wartość domyślna: true
.
Opcjonalny. Gdy wartość tej wartości logicznej to true
, zadanie przekazuje wszystkie pliki wyników testu jako załączniki do przebiegu testu.
Opcje sterowania zadania
Wszystkie zadania mają opcje sterowania oprócz danych wejściowych zadań. Aby uzyskać więcej informacji, zobacz Opcje sterowania i typowe właściwości zadań.
Zmienne wyjściowe
Brak.
Uwagi
To zadanie publikuje wyniki testów w usłudze Azure Pipelines lub TFS, gdy testy są wykonywane w celu zapewnienia kompleksowego środowiska raportowania testów i analizy. Możesz użyć wybranego modułu uruchamiającego testy, który obsługuje wymagany format wyników. Obsługiwane formaty wyników obejmują CTest, JUnit (w tym PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) i xUnit 2.
Inne wbudowane zadania, takie jak zadanie testowe programu Visual Studio i zadanie interfejsu wiersza polecenia Dot NetCore , automatycznie publikują wyniki testów w potoku. Zadania takie jak Ant, Maven, Gulp, Grunt i Xcode udostępniają wyniki publikowania jako opcję w zadaniu lub kompilują biblioteki, takie jak Cobertura i JaCoCo. Jeśli używasz dowolnego z tych zadań, nie potrzebujesz oddzielnego zadania Publikuj wyniki testu w potoku.
Opublikowane wyniki testów są wyświetlane na karcie Testy w podsumowaniu potoku. Wyniki ułatwiają mierzenie jakości potoku, przeglądanie możliwości śledzenia, rozwiązywanie problemów z awariami i własność awarii dysku.
W poniższym przykładzie pokazano, że zadanie zostało skonfigurowane do publikowania wyników testów.
To zadanie można również użyć w potoku kompilacji, aby opublikować wyniki pokrycia kodu wygenerowane podczas uruchamiania testów w usłudze Azure Pipelines lub TFS w celu uzyskania raportowania pokrycia.
Wymagania wstępne
Jeśli używasz własnego agenta systemu Windows, na maszynie musi być zainstalowane następujące wymaganie wstępne:
- .NET Framework 4.6.2 lub nowszą wersję
Wartości domyślne zadań
Opcja domyślna używa formatu JUnit do publikowania wyników testów. W przypadku korzystania z narzędzia VSTest jako elementu testRunner należy zmienić opcję testResultsFiles na **/TEST-*.trx
.
testResultsFormat jest aliasem nazwy wejściowej elementu testRunner . Pliki wyników mogą być generowane przez wielu modułów uruchamiającego, a nie tylko przez określony moduł uruchamiający. Na przykład format wyników jUnit jest obsługiwany przez wiele modułów uruchamiaczy, a nie tylko jUnit.
Aby opublikować wyniki testów dla języka Python przy użyciu języka YAML, zobacz python w sekcji Ekosystemy tych tematów, która zawiera również przykłady dla innych języków.
Mapowanie formatów wyników
Ta tabela zawiera listę pól zgłoszonych na karcie Testy w podsumowaniu kompilacji lub wydania oraz odpowiednie mapowanie z atrybutami w obsługiwanych formatach wyników testów.
Zakres | Pole | Test programu Visual Studio (TRX) |
---|---|---|
Przebieg testu | Tytuł | Tytuł przebiegu testu określony w zadaniu |
Data rozpoczęcia | /TestRun/Times.Attributes["start"]. Wartość | |
Data ukończenia | /TestRun/Times.Attributes["finish"]. Wartość | |
Czas trwania | Data ukończenia — data rozpoczęcia | |
Załączniki | Zapoznaj się z sekcją pomocy technicznej dotyczącą załączników poniżej | |
Wynik testu | Tytuł | /TestRun/Results/UnitTestResult.Attributes["testName"]. Value lub /TestRun/Results/WebTestResult.Attributes["testName"]. Value lub /TestRun/Results/TestResultAggregation.Attributes["testName"]. Wartość |
Data rozpoczęcia | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value lub /TestRun/Results/WebTestResult.Attributes["startTime"]. Value lub /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Wartość | |
Data ukończenia | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value + /TestRun/Results/UnitTestResult.Attributes["duration"]. Value lub /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["duration"]. Value lub /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Wartość | |
Czas trwania | /TestRun/Results/UnitTestResult.Attributes["duration"]. Value lub /TestRun/Results/WebTestResult.Attributes["duration"]. Value lub /TestRun/Results/TestResultAggregation.Attributes["duration"]. Wartość | |
Właściciel | /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Wartość | |
Wynik | /TestRun/Results/UnitTestResult.Attributes["result"]. Value lub /TestRun/Results/WebTestResult.Attributes["result"]. Value lub /TestRun/Results/TestResultAggregation.Attributes["result"]. Wartość | |
Komunikat o błędzie | /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText lub /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText lub /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText | |
Ślad stosu | /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText lub /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText lub /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText | |
Załączniki | Zapoznaj się z sekcją pomocy technicznej dotyczącą załączników poniżej | |
Dziennik konsoli | /TestRun/Results/UnitTestResult/Output/StdOut.InnerText lub /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText lub /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText | |
Dziennik błędów konsoli | /TestRun/Results/UnitTestResult/Output/StdErr.InnerText lub /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText lub /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText | |
Nazwa agenta | /TestRun/Results/UnitTestResult.Attributes["computerName"]. Value lub /TestRun/Results/WebTestResult.Attributes["computerName"]. Value lub /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Wartość | |
Plik testowy | /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Wartość | |
Priorytet | /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Wartość |
Uwaga
Czas trwania jest używany tylko wtedy, gdy data rozpoczęcia i data ukończenia nie są dostępne.
W pełni kwalifikowany format nazwy testName to Namespace.Testclass.Methodname z limitem znaków 512. Jeśli test jest oparty na danych i ma parametry, limit znaków będzie zawierać parametry.
Podczas publikowania wyniku testu może wystąpić następujący błąd: Nie można opublikować wyników testu: określono nieprawidłowy priorytet
Ten błąd występuje, jeśli którakolwiek z metod testowych ma priorytet ustawiony powyżej 255, napraw priorytet metody testowej w kodzie i ponownie wykonaj testy. Możesz przejrzeć wygenerowany plik trx, aby zobaczyć, że wszystkie testy mają priorytet większy niż 255.
Obsługa załączników
Zadanie Publikuj wyniki testu zapewnia obsługę załączników zarówno dla przebiegu testu, jak i wyników testów dla następujących formatów. W przypadku projektów publicznych obsługujemy łącznie 2 GB załączników.
Test programu Visual Studio (TRX)
Zakres | Typ | Ścieżka |
---|---|---|
Przebieg testu | Zbierających | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wartość |
Wynik testu | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Wartość | |
Pokrycie kodu | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Value And /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Wartość | |
Wynik testu | Moduły zbierające dane | /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Value lub /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Value lub /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wartość |
Wynik testu | /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"]. Value lub /TestRun/Results/WebTestResult/ResultFiles/ResultFiles.Attributes["path"]. Value lub /TestRun/Results/TestResultAggregation/ResultFiles/ResultFiles.Attributes["path"]. Wartość |
Uwaga
Opcja przekazywania pliku wyników testu jako załącznika jest opcją domyślną w zadaniu, która ma zastosowanie do wszystkich formatów.
Przykłady
Docker
W przypadku aplikacji opartych na platformie Docker istnieje wiele sposobów kompilowania aplikacji i uruchamiania testów:
- Kompilowanie i testowanie w potoku kompilacji: kompilacje i testy są wykonywane w potoku, a wyniki testów są publikowane przy użyciu zadania Publikuj wyniki testu .
- Kompilowanie i testowanie za pomocą wieloetapowego pliku Dockerfile: kompilacje i testy są wykonywane wewnątrz kontenera przy użyciu wieloetapowego pliku platformy Docker, ponieważ takie wyniki testów nie są publikowane z powrotem do potoku.
- Kompilowanie, testowanie i publikowanie wyników za pomocą pliku Dockerfile: kompilacje i testy są wykonywane wewnątrz kontenera, a wyniki są publikowane z powrotem do potoku. Zobacz przykład poniżej.
Kompilowanie, testowanie i publikowanie wyników za pomocą pliku platformy Docker
W tym podejściu utworzysz kod i uruchomisz testy wewnątrz kontenera przy użyciu pliku platformy Docker. Wyniki testu są następnie kopiowane do hosta do opublikowania w potoku. Aby opublikować wyniki testu w usłudze Azure Pipelines, możesz użyć zadania Publikowanie wyników testu . Końcowy obraz zostanie opublikowany na platformie Docker lub Azure Container Registry.
Uzyskiwanie kodu
Dockerfile.build
Utwórz plik w katalogu głównym katalogu projektu, wykonując następujące czynności:# 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
Ten plik zawiera instrukcje dotyczące kompilowania kodu i uruchamiania testów. Testy są następnie kopiowane do pliku
testresults.trx
wewnątrz kontenera.Aby obraz końcowy był jak najmniejszy, zawierający tylko artefakty środowiska uruchomieniowego i wdrożenia, zastąp zawartość istniejącego
Dockerfile
obrazu następującymi elementami:# 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"]
Definiowanie potoku kompilacji
Jeśli masz konto Docker Hub i chcesz wypchnąć obraz do rejestru platformy Docker, zastąp zawartość
.vsts-ci.docker.yml
pliku następującym kodem:# 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)
Alternatywnie, jeśli skonfigurujesz Azure Container Registry i chcesz wypchnąć obraz do tego rejestru, zastąp zawartość
.vsts-ci.yml
pliku następującym kodem:# 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)
Wypchnij zmianę do gałęzi głównej w repozytorium.
Jeśli używasz Azure Container Registry, upewnij się, że rejestr został wstępnie utworzony w Azure Portal. Skopiuj nazwę użytkownika administratora i hasło wyświetlane w sekcji Klucze dostępu ustawień rejestru w Azure Portal.
Zaktualizuj potok kompilacji, wykonując następujące czynności
- Pula agentów:
Hosted Ubuntu 1604
- dockerId: ustaw wartość na identyfikator platformy Docker dla usługi DockerHub lub nazwę użytkownika administratora dla Azure Container Registry.
- dockerPassword: ustaw wartość na hasło dla usługi DockerHub lub hasła administratora Azure Container Registry.
- Ścieżka pliku YAML:
/.vsts-ci.docker.yml
- Pula agentów:
W kolejce nową kompilację i watch utworzyć i wypchnąć obraz platformy Docker do rejestru oraz wyniki testów do usługi Azure DevOps.
Wymagania
Wymaganie | Opis |
---|---|
Typy potoków | YAML, klasyczna kompilacja, wersja klasyczna |
Działa w | Agent, DeploymentGroup |
Wymagania | Brak |
Możliwości | To zadanie nie spełnia żadnych wymagań dotyczących kolejnych zadań w zadaniu. |
Ograniczenia poleceń | Dowolne |
Zmienne ustawialne | Dowolne |
Wersja agenta | 2.0.0 lub nowsza |
Kategoria zadania | Testowanie |