PublishTestResults@2 – úloha Publikování výsledků testu v2

Publikujte výsledky testů do Azure Pipelines.

Publikujte výsledky testů do Azure Pipelines/TFS.

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

Vstupy

testResultsFormat - Formát výsledku testu
Alias vstupu: testRunner. string. Povinná hodnota. Povolené hodnoty: JUnit, NUnit, VSTest, XUnit, . CTest Výchozí hodnota: JUnit.

Určuje formát souborů výsledků, které chcete publikovat. Podporují se následující formáty: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) a xUnit 2.


testResultsFormat - Formát výsledku testu
Alias vstupu: testRunner. string. Povinná hodnota. Povolené hodnoty: JUnit, NUnit, VSTest, . XUnit Výchozí hodnota: JUnit.

Určuje formát souborů výsledků, které chcete publikovat. Podporují se následující formáty: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) a xUnit 2.


testResultsFiles - Soubory výsledků testů
string. Povinná hodnota. Výchozí hodnota: **/TEST-*.xml.

Určuje jeden nebo více souborů výsledků testu.

  • Můžete použít zástupný znak s jednou složkou (*) a rekurzivní zástupné cardy (**). Vyhledá například všechny soubory XML, **/TEST-*.xml jejichž názvy začínají TEST- ve všech podadresářích. Pokud jako formát výsledku testu používáte VSTest, měl by se typ souboru změnit například na .trx . **/TEST-*.trx
  • Je možné zadat více cest oddělených novým řádkem.
  • Navíc přijímá vzory minimatch.

Vyloučí například !TEST[1-3].xml soubory s názvem TEST1.xml, TEST2.xmlnebo TEST3.xml.


searchFolder - Search složky
string. Výchozí hodnota: $(System.DefaultWorkingDirectory).

Nepovinný parametr. Určuje složku pro vyhledání souborů výsledků testu.


mergeTestResults - Sloučení výsledků testu
boolean. Výchozí hodnota: false.

Pokud je truehodnota této logické hodnoty , úloha hlásí výsledky testu ze všech souborů proti jednomu testovacímu běhu. Pokud je falsehodnota , úloha vytvoří samostatný testovací běh pro každý soubor výsledků testu.

Poznámka

Pomocí nastavení výsledků testu sloučení můžete zkombinovat soubory ze stejné testovací architektury, abyste zajistili, že se mapování výsledků a doba trvání počítají správně.


failTaskOnFailedTests - Selhání v případě selhání testů
boolean. Výchozí hodnota: false.

Nepovinný parametr. Pokud je truehodnota této logické hodnoty , úkol selže, pokud jsou některé testy v souboru výsledků označeny jako neúspěšné. Výchozí hodnota je false, která jednoduše publikuje výsledky ze souboru výsledků.


failTaskOnFailureToPublishResults - Selhání, pokud dojde k chybě při publikování výsledků testů
boolean. Výchozí hodnota: false.

Pokud truedojde k chybě při publikování výsledků testů, úloha selže.


failTaskOnMissingResultsFile - Selhání, pokud se nenajdou žádné soubory výsledků
boolean. Výchozí hodnota: false.

Pokud se nenajdou žádné soubory výsledků, úkol se nezdaří.


testRunTitle - Název testovacího běhu
string.

Nepovinný parametr. Určuje název testovacího běhu, pro který se budou hlásit výsledky. Je možné použít názvy proměnných deklarované v kanálu buildu nebo verze.


buildPlatform - Sestavení platformy
Alias vstupu: platform. string.

Nepovinný parametr. Určuje platformu sestavení, pro kterou se má testovací běh hlásit. Příklad: x64 nebo x86. Pokud jste v úloze sestavení definovali proměnnou pro platformu, použijte ji tady.


buildConfiguration - Konfigurace sestavení
Alias vstupu: configuration. string.

Nepovinný parametr. Určuje konfiguraci sestavení, proti které se má testovací běh hlásit. Příklad: Debug nebo Release. Pokud jste definovali proměnnou pro konfiguraci v úloze sestavení, použijte ji tady.


publishRunAttachments - Nahrání souborů s výsledky testu
boolean. Výchozí hodnota: true.

Nepovinný parametr. Pokud je truehodnota této logické hodnoty , úloha nahraje všechny soubory výsledků testu jako přílohy testovacího běhu.


Možnosti ovládání úloh

Všechny úlohy mají kromě vstupů také možnosti ovládání. Další informace najdete v tématu Možnosti ovládacích prvků a běžné vlastnosti úlohy.

Výstupní proměnné

Žádné

Poznámky

Tato úloha při provádění testů publikuje výsledky testů do služby Azure Pipelines nebo TFS, aby bylo k dispozici komplexní prostředí pro vytváření sestav a analýzy testů. Můžete použít test runner podle vašeho výběru, který podporuje požadovaný formát výsledků. Mezi podporované formáty výsledků patří CTest, JUnit (včetně PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) a xUnit 2.

Další předdefinované úlohy, jako je úloha Visual Studio Test a úloha Rozhraní příkazového řádku Dot NetCore, automaticky publikují výsledky testů do kanálu. Úlohy jako Ant, Maven, Gulp, Grunt a Xcode poskytují výsledky publikování jako možnost v rámci úlohy nebo sestavují knihovny, jako jsou Cobertura a JaCoCo. Pokud používáte některou z těchto úloh, nepotřebujete v kanálu samostatnou úlohu Publikovat výsledky testu .

Publikované výsledky testů se zobrazí na kartě Testy v souhrnu kanálu. Výsledky vám pomůžou měřit kvalitu kanálu, kontrolovat sledovatelnost, řešit chyby a řídit vlastnictví selhání.

Následující příklad ukazuje, že úloha je nakonfigurovaná tak, aby publikovala výsledky testu.

Otevření stránky historie testů

Tuto úlohu můžete použít také v kanálu buildu k publikování výsledků pokrytí kódu vytvořených při spouštění testů do služby Azure Pipelines nebo TFS, abyste získali sestavy pokrytí.

Požadavky

Pokud používáte agenta Windows v místním prostředí, musí být na vašem počítači nainstalovaný tento předpoklad:

Výchozí nastavení úkolu

Výchozí možnost používá k publikování výsledků testů formát JUnit. Pokud jako testRunner používáte VSTest, možnost testResultsFiles by se měla změnit na **/TEST-*.trx.

testResultsFormat je alias pro název vstupu testRunneru . Soubory výsledků může vytvořit více běžců, nejen konkrétní běžce. Například formát výsledků jUnit podporuje mnoho běžců, a nejen jUnit.

Pokud chcete publikovat výsledky testů pro Python pomocí YAML, přečtěte si téma Python v části Ekosystémy v těchto tématech, kde najdete také příklady pro jiné jazyky.

Mapování formátů výsledků

Tato tabulka uvádí pole hlášená na kartě Testy v souhrnu sestavení nebo verze a odpovídající mapování s atributy v podporovaných formátech výsledků testu.

Obor Pole Visual Studio Test (TRX)
Testovací běh Nadpis Název testovacího spuštění zadaný v úloze
Datum zahájení /TestRun/Times.Attributes["start"]. Hodnotu
Datum dokončení /TestRun/Times.Attributes["finish"]. Hodnotu
Doba trvání Datum dokončení – datum zahájení
Přílohy Projděte si část podpora příloh níže.
Výsledek testu Nadpis /TestRun/Results/UnitTestResult.Attributes["testName"]. Value Or /TestRun/Results/WebTestResult.Attributes["testName"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["testName"]. Hodnotu
Datum zahájení /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value Or /TestRun/Results/WebTestResult.Attributes["startTime"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Hodnotu
Datum dokončení /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value + /TestRun/Results/UnitTestResult.Attributes["duration"]. Value Or /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["duration"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Hodnotu
Doba trvání /TestRun/Results/UnitTestResult.Attributes["duration"]. Value Or /TestRun/Results/WebTestResult.Attributes["duration"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["duration"]. Hodnotu
Vlastník /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. Hodnotu
Výsledek /TestRun/Results/UnitTestResult.Attributes["result"]. Value Or /TestRun/Results/WebTestResult.Attributes["result"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["result"]. Hodnotu
Chybová zpráva /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText nebo /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText nebo /TestRun/Results/TestResultaggregation/Output/ErrorInfo/Message.InnerText
Trasování zásobníku /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText nebo /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText nebo /TestRun/Results/TestResultaggregation/Output/ErrorInfo/StackTrace.InnerText
Přílohy Projděte si část podpora příloh níže.
Protokol konzoly /TestRun/Results/UnitTestResult/Output/StdOut.InnerText nebo /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText Nebo /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
Protokol chyb konzoly /TestRun/Results/UnitTestResult/Output/StdErr.InnerText Nebo /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText Nebo /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
Název agenta /TestRun/Results/UnitTestResult.Attributes["název_počítače"]. Value Or /TestRun/Results/WebTestResult.Attributes["název_počítače"]. Value Or /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Hodnotu
Testovací soubor /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Hodnotu
Priorita /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Hodnotu

Poznámka

Doba trvání se používá jenom v případech, kdy nejsou k dispozici datum zahájení a datum dokončení .

Plně kvalifikovaný formát názvu pro testName je Namespace.Testclass.Methodname s limitem znaků 512. Pokud je test řízený daty a má parametry, limit počtu znaků bude zahrnovat parametry.

Při publikování výsledku testu se může zobrazit tato chyba: Publikování výsledků testu se nezdařilo: Zadaná neplatná priorita

K této chybě dochází, pokud má některá z testovacích metod nastavenou prioritu vyšší než 255, opravte prioritu testovací metody v kódu a spusťte testy znovu. Můžete zkontrolovat vygenerovaný soubor trx a zobrazit všechny testy s prioritou vyšší než 255.

Podpora příloh

Úloha Publikovat výsledky testu poskytuje podporu příloh pro výsledky testu i pro následující formáty. U veřejných projektů podporujeme celkem 2 GB příloh.

Visual Studio Test (TRX)

Obor Typ Cesta
Testovací běh Kolektor dat /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Hodnotu
Výsledek testu /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. Hodnotu
Pokrytí kódu /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"]. Hodnotu
Výsledek testu Kolektory dat /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Value Or /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Value Or /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Hodnotu
Výsledek testu /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Or /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Value Or /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Hodnotu

Poznámka

Možnost nahrát soubor výsledků testu jako přílohu je výchozí možností v úkolu, která se vztahuje na všechny formáty.

Příklady

Docker

U aplikací založených na Dockeru existuje mnoho způsobů, jak sestavit aplikaci a spouštět testy:

  • Sestavení a testování v kanálu sestavení: Sestavení a testy se spouštějí v kanálu a výsledky testů se publikují pomocí úlohy Publikovat výsledky testů .
  • Sestavení a testování s vícefázovým souborem Dockerfile: Sestavení a testy se spouštějí uvnitř kontejneru pomocí vícefázového souboru Dockeru, protože tyto výsledky testů se nepublikují zpět do kanálu.
  • Sestavení, testování a publikování výsledků pomocí souboru Dockerfile: sestavení a testy se spouštějí uvnitř kontejneru a výsledky se publikují zpět do kanálu. Viz následující příklad.

Sestavení, testování a publikování výsledků pomocí souboru Dockeru

Při tomto přístupu vytvoříte kód a spustíte testy v kontejneru pomocí souboru Dockeru. Výsledky testu se pak zkopírují do hostitele, aby se publikovaly do kanálu. Pokud chcete publikovat výsledky testů do Azure Pipelines, můžete použít úlohu Publikovat výsledky testu . Konečná image se publikuje do Dockeru nebo Azure Container Registry.

Získání kódu
  1. Vytvořte Dockerfile.build soubor v kořenovém adresáři projektu pomocí následujícího příkazu:

    # 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
    

    Tento soubor obsahuje pokyny k sestavení kódu a spuštění testů. Testy se pak zkopírují do souboru testresults.trx uvnitř kontejneru.

  2. Pokud chcete, aby byla konečná image co nejmenší a obsahovala pouze artefakty modulu runtime a nasazení, nahraďte obsah existujícího Dockerfile následujícím kódem:

    # 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"]
    
Definování kanálu sestavení
  1. Pokud máte účet Docker Hub a chcete image odeslat do registru Dockeru, nahraďte obsah .vsts-ci.docker.yml souboru následujícím kódem:

    # 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)
    

    Případně pokud nakonfigurujete Azure Container Registry a chcete image odeslat do tohoto registru, nahraďte obsah .vsts-ci.yml souboru následujícím kódem:

    # 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. Nasdílejte změnu do hlavní větve v úložišti.

  3. Pokud používáte Azure Container Registry, ujistěte se, že jste registr předem vytvořili v Azure Portal. Zkopírujte uživatelské jméno a heslo správce uvedené v části Přístupové klíče nastavení registru v Azure Portal.

  4. Aktualizujte kanál buildu pomocí následujících

    • Fond agentů: Hosted Ubuntu 1604
      • dockerId: Nastavte hodnotu na ID DockerHubu nebo uživatelské jméno správce pro Azure Container Registry.
      • dockerPassword: Nastavte hodnotu na heslo pro DockerHub nebo heslo správce Azure Container Registry.
    • Cesta k souboru YAML: /.vsts-ci.docker.yml
  5. Zařaďte do fronty nové sestavení a watch vytvoření a odeslání image Dockeru do registru a výsledky testu do Azure DevOps.

Požadavky

Požadavek Popis
Typy kanálů YAML, classic build, verze Classic
Spustí se Agent, DeploymentGroup
Požadavky Žádné
Možnosti Tento úkol nesplňuje žádné požadavky na následné úkoly v úloze.
Omezení příkazů Všechny
Nastavitelné proměnné Všechny
Verze agenta 2.0.0 nebo vyšší
Kategorie úloh Test