Udostępnij za pośrednictwem


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ę od TEST- 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.xmllub 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 truezadanie 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

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.

Otwórz stronę historii testów

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:

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
  1. 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.

  2. 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
  1. 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)
    
  2. Wypchnij zmianę do gałęzi głównej w repozytorium.

  3. 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.

  4. 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
  5. 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