PublishTestResults@2 — publikowanie wyników testów w wersji 2
Publikowanie wyników testów w usłudze Azure Pipelines.
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.
Dane wejściowe
format wyników testu testResultsFormat
-
Alias wejściowy: testRunner
.
string
. To jest wymagane. Dozwolone wartości: JUnit
, NUnit
, VSTest
, 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.
testResultsFiles
-
pliki wyników testów
string
. To jest wymagane. Wartość domyślna: **/TEST-*.xml
.
Określa co najmniej jeden plik wyników testów.
- Symbol wieloznaczny z jednym folderem (
*
) i cykliczne symbole wieloznaczne (**
). Na przykład**/TEST-*.xml
wyszukuje wszystkie pliki XML, których nazwy zaczynają się odTEST-
we wszystkich podkatalogach. W przypadku używania programu VSTest jako formatu wyników testu typ pliku należy zmienić na.trx
np.**/TEST-*.trx
- Można określić wiele ścieżek rozdzielonych nową linią.
- Ponadto akceptuje wzorce minimatch.
Na przykład !TEST[1-3].xml
wyklucza pliki o nazwie TEST1.xml
, TEST2.xml
lub TEST3.xml
.
folderu wyszukiwania searchFolder
-
string
. Wartość domyślna: $(System.DefaultWorkingDirectory)
.
Opcjonalny. Określa folder do wyszukania plików wyników testu.
mergeTestResults
-
Scal wyniki testów
boolean
. Wartość domyślna: false
.
Gdy wartość tego elementu logicznego jest true
, zadanie zgłasza wyniki testu ze wszystkich plików względem jednego przebiegu testu. Jeśli wartość jest false
, zadanie tworzy oddzielny przebieg testu dla każdego pliku wyników testu. Aby zoptymalizować pod kątem lepszej wydajności, wyniki będą zawsze scalane w jednym przebiegu, jeśli istnieje więcej niż 100 plików wyników, nawet jeśli ta opcja jest ustawiona na false
.
Uwaga
Użyj ustawienia wyników testu scalania, aby połączyć pliki z tej samej platformy testowej, 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ść wartości logicznej jest 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 testu
boolean
. Wartość domyślna: false
.
W przypadku true
zadanie kończy się niepowodzeniem, jeśli wystąpił błąd podczas publikowania wyników testu.
failTaskOnMissingResultsFile
-
Niepowodzenie, jeśli nie znaleziono żadnych plików wyników
boolean
. Wartość domyślna: false
.
Nie można wykonać zadania, jeśli nie znaleziono żadnych plików wyników.
testRunTitle
-
tytuł przebiegu testu
string
.
Opcjonalny. Określa nazwę przebiegu testu, względem którego zostaną zgłoszone wyniki. Można użyć nazw zmiennych zadeklarowanych w potoku kompilacji lub wydania.
buildPlatform
-
Build Platform
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ą konfiguracji w zadaniu kompilacji, użyj jej tutaj.
publishRunAttachments
-
Przekaż pliki wyników testów
boolean
. Wartość domyślna: true
.
Opcjonalny. Gdy wartość tego elementu logicznego jest true
, zadanie przekazuje wszystkie pliki wyników testu jako załączniki do przebiegu testu.
Opcje sterowania zadaniami
Wszystkie zadania mają opcje sterowania oprócz danych wejściowych zadań podrzędnych. Aby uzyskać więcej informacji, zobacz opcje kontroli i typowe właściwości zadań.
Zmienne wyjściowe
Żaden.
Uwagi
- Wymagania wstępne
- Domyślne ustawienia zadań
- Mapowanie formatów wyników
- Obsługa załączników
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 zadania testowego programu Visual Studio i zadanie interfejsu wiersza polecenia Dot NetCore automatycznie publikować wyniki testów w potoku. Zadania takie jak Ant, Maven, Gulp, Grunti Xcode zapewniają wyniki publikowania jako opcję w ramach zadania lub bibliotek kompilacji, takich jak Cobertura i JaCoCoCo. Jeśli używasz dowolnego z tych zadań, nie potrzebujesz oddzielnego zadania Publikowanie wyników testów w potoku.
Opublikowane wyniki testu 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 testu.
To zadanie można również użyć w potoku kompilacji, aby opublikować wyniki pokrycia kodu utworzone 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, maszyna musi mieć zainstalowane następujące wymagania wstępne:
- .NET Framework 4.6.2 lub nowszej wersji
Wartości domyślne zadań
Opcja domyślna używa formatu JUnit do publikowania wyników testów. W przypadku używania narzędzia VSTest jako testRunner należy zmienić opcję testResultsFiles na **/TEST-*.trx
.
testResultsFormat jest aliasem nazwy wejściowej testRunner. Pliki wyników mogą być tworzone przez wiele 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
W tej tabeli wymieniono pola zgłaszane 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) |
---|---|---|
przebiegu testu | Nazwa | tytuł przebiegu testu określony w zadaniu |
Data rozpoczęcia | /TestRun/Times.Attributes["uruchomić"]. Wartość | |
Data ukończenia | /TestRun/Times.Attributes["zakończyć"]. Wartość | |
Czas trwania | Data ukończenia — data rozpoczęcia | |
Załączniki | Zapoznaj się z sekcją obsługi załączników poniżej | |
wynik testu | Nazwa | /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["czas trwania"]. Value Lub /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["czas trwania"]. Value Lub /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["czas trwania"]. Wartość | |
Czas trwania | /TestRun/Results/UnitTestResult.Attributes["czas trwania"]. Value Lub /TestRun/Results/WebTestResult.Attributes["czas trwania"]. Value Lub /TestRun/Results/TestResultAggregation.Attributes["czas trwania"]. Wartość | |
Właściciel | /TestRun/TestDefinitions/UnitTest/Owner.Attributes["nazwa"]. Wartość | |
Wynik | /TestRun/Results/UnitTestResult.Attributes["wynik"]. Value Lub /TestRun/Results/WebTestResult.Attributes["wynik"]. Value Lub /TestRun/Results/TestResultAggregation.Attributes["wyniku"]. Wartość | |
Komunikat o błędzie | /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText lub /TestRun/Results/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ą obsługi 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["priorytet"]. Wartość |
Uwaga
czas trwania jest używany tylko wtedy, gdy data rozpoczęcia i data ukończona 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 określony
Ten błąd występuje, jeśli którykolwiek 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ć wszystkie testy o priorytcie większym niż 255.
Obsługa załączników
Zadanie Publikuj wyniki testu zapewnia obsługę załączników zarówno dla wyników przebiegu testu, jak i dla następujących formatów. W przypadku projektów publicznych obsługujemy łącznie 2 GB załączników.
- test programu Visual Studio (TRX)
- NUnit 3
- JUnit
Test programu Visual Studio (TRX)
Zakres | Typ | Ścieżka |
---|---|---|
Przebieg testu | Kolektor danych | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Wartość |
Wynik testu | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["ścieżka"]. Wartość | |
Pokrycie kodu | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Value And /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollectors/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["ścieżka"]. Value Lub /TestRun/Results/WebTestResult/ResultFiles/ResultFiles.Attributes["ścieżka"]. Value Lub /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["ścieżka"]. Wartość |
Uwaga
Opcja przekazania 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 tworzenia aplikacji i uruchamiania testów:
- kompilacji i testowania w potoku kompilacji: kompilacje i testy są wykonywane w potoku i wyniki testów są publikowane przy użyciu zadania publikowanie wyników 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.
- kompilacji, testowania i publikowania wyników za pomocą pliku Dockerfile: kompilacje i testy są wykonywane wewnątrz kontenera, a wyniki są publikowane z powrotem do potoku. Zobacz poniższy przykład.
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 testów. Końcowy obraz zostanie opublikowany w usłudze Docker lub Azure Container Registry.
Pobieranie kodu
Utwórz plik
Dockerfile.build
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
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 usługi Docker Hub i chcesz wypchnąć obraz do rejestru platformy Docker, zastąp zawartość pliku
.vsts-ci.docker.yml
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 usługę Azure Container Registry i chcesz wypchnąć obraz do tego rejestru, zastąp zawartość pliku
.vsts-ci.yml
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 usługi Azure Container Registry, upewnij się, że wstępnie utworzono rejestr w witrynie Azure Portal. Skopiuj nazwę użytkownika i hasło administratora wyświetlane w sekcji klucze dostępu ustawień rejestru w witrynie Azure Portal.
Zaktualizuj potok kompilacji, wykonując następujące czynności
-
puli agentów:
Hosted Ubuntu 1604
- dockerId: ustaw wartość na identyfikator platformy Docker dla usługi DockerHub lub nazwę użytkownika administratora usługi Azure Container Registry.
- dockerPassword: ustaw wartość na hasło dla usługi DockerHub lub hasła administratora usługi Azure Container Registry.
-
ścieżki pliku YAML:
/.vsts-ci.docker.yml
-
puli agentów:
Kolejkowanie nowej kompilacji i obserwowanie jej tworzenia i wypychania obrazu platformy Docker do rejestru oraz wyników testów do usługi Azure DevOps.
Wymagania
Wymaganie | Opis |
---|---|
Typy potoków | YAML, klasyczna kompilacja, wersja klasyczna |
Działa na | Agent, DeploymentGroup |
Wymagania | Żaden |
możliwości | To zadanie nie spełnia żadnych wymagań dotyczących kolejnych zadań w zadaniu. |
ograniczenia poleceń | Jakikolwiek |
zmienne ustawiane | Jakikolwiek |
Wersja agenta | 2.0.0 lub nowsza |
Kategoria zadań | Testowanie |