PublishTestResults@2 – Publikování výsledků testů v2 – úloha
Publikujte výsledky testů do Azure Pipelines.
Syntaxe
# 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.
Vstupy
testResultsFormat
-
formát výsledků testu
Vstupní alias: testRunner
.
string
. Povinné. 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.
testResultsFiles
-
soubory výsledků testů
string
. Povinné. Výchozí hodnota: **/TEST-*.xml
.
Určuje jeden nebo více souborů výsledků testů.
- Můžete použít zástupný znak s jednou složkou (
*
) a rekurzivní zástupné cardy (**
). Například**/TEST-*.xml
hledá všechny soubory 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 na.trx
např.**/TEST-*.trx
- Je možné zadat více cest oddělených novým řádkem.
- Kromě toho přijímá minimatch vzorů.
Například !TEST[1-3].xml
vylučuje soubory s názvem TEST1.xml
, TEST2.xml
nebo TEST3.xml
.
searchFolder
-
složky výsledků hledání
string
. Výchozí hodnota: $(System.DefaultWorkingDirectory)
.
Volitelný. Určuje složku, ve které se mají hledat soubory výsledků testu.
mergeTestResults
-
sloučení výsledků testů
boolean
. Výchozí hodnota: false
.
Pokud je hodnota této logické hodnoty true
, úloha hlásí výsledky testu ze všech souborů na jednom testovacím spuštění. Pokud je hodnota false
, úloha vytvoří samostatné testovací spuštění pro každý soubor výsledků testu. Pokud chcete optimalizovat lepší výkon, výsledky se vždy sloučí do jednoho spuštění, pokud je více než 100 výsledných souborů, i když je tato možnost nastavená na false
.
Poznámka:
Pomocí nastavení výsledků sloučení testů můžete zkombinovat soubory ze stejné testovací architektury, abyste zajistili správné výpočty mapování výsledků a doby trvání.
failTaskOnFailedTests
-
selhání v případě selhání testů
boolean
. Výchozí hodnota: false
.
Volitelný. Pokud je hodnota této logické hodnoty true
, úloha selže, pokud některý z testů v souboru výsledků je označen jako neúspěšný. Výchozí hodnota je false
, která jednoduše publikuje výsledky ze souboru výsledků.
failTaskOnFailureToPublishResults
-
Selhání, pokud při publikování výsledků testů dojde k chybě,
boolean
. Výchozí hodnota: false
.
Při true
úloha selže, pokud dojde k chybě při publikování výsledků testu.
failTaskOnMissingResultsFile
-
selhání, pokud nejsou nalezeny žádné soubory výsledků
boolean
. Výchozí hodnota: false
.
Pokud nejsou nalezeny žádné soubory výsledků, úkol se nezdaří.
testRunTitle
-
název testovacího spuštění
string
.
Volitelný. Určuje název testovacího spuštění, proti kterému budou výsledky hlášeny. Názvy proměnných deklarované v kanálu buildu nebo verze lze použít.
buildPlatform
-
build platform
Vstupní alias: platform
.
string
.
Volitelný. Určuje platformu sestavení, pro kterou má být hlášen testovací běh. Například: x64
nebo x86
. Pokud jste v úloze sestavení definovali proměnnou pro platformu, použijte ji tady.
buildConfiguration
-
konfigurace sestavení
Vstupní alias: configuration
.
string
.
Volitelný. Určuje konfiguraci sestavení, pro kterou má být hlášen testovací běh. Například: Debug
nebo Release
. Pokud jste v úloze sestavení definovali proměnnou pro konfiguraci, použijte ji tady.
publishRunAttachments
-
nahrání souborů výsledků testů
boolean
. Výchozí hodnota: true
.
Volitelný. Pokud je hodnota této logické hodnoty true
, úloha nahraje všechny soubory výsledků testu jako přílohy do testovacího spuštění.
Možnosti ovládání úloh
Všechny úlohy mají kromě vstupů také možnosti ovládání. Další informace naleznete v tématu Možnosti ovládacího prvku a běžné vlastnosti úloh.
Výstupní proměnné
Žádné.
Poznámky
Tato úloha publikuje výsledky testů do Azure Pipelines nebo TFS, když se testy spustí, aby poskytovaly komplexní prostředí pro vytváření sestav a analýzy testů. Můžete použít spouštěč testů podle svého výběru, který podporuje požadovaný formát výsledků. Podporované formáty výsledků zahrnují CTest, JUnit (včetně PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) a xUnit 2.
Další předdefinované úlohy, například úlohy Visual Studio Test a úlohy Rozhraní příkazového řádku Dot NetCore automaticky publikovat výsledky testů do kanálu. Úkoly jako Ant, Maven, Gulp, Grunta Xcode poskytují výsledky publikování jako možnost v rámci úkolu nebo vytvářet knihovny, jako jsou Cobertura a JaCoCo. Pokud používáte některou z těchto úloh, nepotřebujete samostatnou publikovat výsledky testů úlohu v kanálu.
Výsledky publikovaných 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 nakonfigurována pro publikování výsledků testu.
Tuto úlohu můžete použít také v kanálu buildu k publikování výsledků pokrytí kódu při spouštění testů do Azure Pipelines nebo TFS, aby bylo možné získat sestavy pokrytí.
Požadavky
Pokud používáte agenta v místním prostředí Windows, musí mít váš počítač nainstalovaný tento předpoklad:
- rozhraní .NET Framework 4.6.2 nebo novější verze
Výchozí hodnoty úkolů
Výchozí možnost používá k publikování výsledků testů formát JUnit. Při použití VSTest jako testRunner, testResultsFiles možnost by měla být změněna na **/TEST-*.trx
.
testResultsFormat je alias pro název vstupu test Runneru. Soubory výsledků můžou vytvořit více spouštěčů, nejen konkrétní spouštěč. Například formát výsledků jUnit je podporován mnoha spouštěči, nejen jUnit.
Pokud chcete publikovat výsledky testů pro Python pomocí YAML, podívejte se na Pythonu v části Ekosystémy části těchto témat, která obsahují 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 vydané verze a odpovídající mapování s atributy v podporovaných formátech výsledků testu.
Obor | (No improvements necessary, the translation is already optimal.) | Visual Studio Test (TRX) |
---|---|---|
testovacího spuštění | Titulek | název testovacího spuštění zadaný v úloze |
Datum zahájení | /TestRun/Times.Attributes["spustit"]. Hodnota | |
Datum dokončení | /TestRun/Times.Attributes["dokončit"]. Hodnota | |
Doba trvání | Datum dokončení – datum zahájení | |
Přílohy | Informace o podpoře příloh níže | |
výsledek testu | Titulek | /TestRun/Results/UnitTestResult.Attributes["testName"]. Hodnota nebo /TestRun/Results/WebTestResult.Attributes["testName"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["testName"]. Hodnota |
Datum zahájení | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Hodnota nebo /TestRun/Results/WebTestResult.Attributes["startTime"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Hodnota | |
Datum dokončení | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value + /TestRun/Results/UnitTestResult.Attributes["doba trvání"]. Hodnota nebo /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["duration"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["doba trvání"]. Hodnota | |
Doba trvání | /TestRun/Results/UnitTestResult.Attributes["doba trvání"]. Hodnota nebo /TestRun/Results/WebTestResult.Attributes["doba trvání"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["doba trvání"]. Hodnota | |
Vlastník | /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["název"]. Hodnota | |
Výsledek | /TestRun/Results/UnitTestResult.Attributes["výsledek"]. Hodnota nebo /TestRun/Results/WebTestResult.Attributes["výsledek"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["výsledek"]. Hodnota | |
Zpráva o chybě | /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 | Informace o podpoře 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"]. Hodnota nebo /TestRun/Results/WebTestResult.Attributes["název_počítače"]. Hodnota nebo /TestRun/Results/TestResultAggregation.Attributes["název_počítače"]. Hodnota | |
Testovací soubor | /TestRun/TestDefinitions/UnitTest.Attributes["úložiště"]. Hodnota | |
Priorita | /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Hodnota |
Poznámka:
Doba trvání se používá jenom v případech, kdy Datum zahájení a Datum dokončení není k dispozici.
Plně kvalifikovaný formát názvu pro testName je Namespace.Testclass.Methodname s limitem znaků 512. Pokud je test řízený daty a má parametry, bude limit znaků obsahovat parametry.
Při publikování výsledku testu se může zobrazit tato chyba: Nepodařilo se publikovat výsledky testu: Zadaná neplatná priorita
K této chybě dochází v případě, že některá z testovacích metod má nastavenou prioritu vyšší než 255, opravte prioritu testovací metody v kódu a spusťte testy znovu. Vygenerovaný soubor trx si můžete prohlédnout a zobrazit všechny testy s prioritou větší než 255.
Podpora příloh
Úloha Publikovat výsledky testu poskytuje podporu příloh pro výsledky testovacího běhu i testu pro následující formáty. U veřejných projektů podporujeme celkem 2 GB příloh.
- Visual Studio Test (TRX)
- NUnit 3
- JUnit
Visual Studio Test (TRX)
Obor | Typ | Cesta |
---|---|---|
Testovací spuštění | Sběrač dat | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Hodnota |
Výsledek testu | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["cesta"]. Hodnota | |
Pokrytí kódu | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Hodnoty a /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Hodnota | |
výsledek testu | Kolektory dat | /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Hodnota nebo /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Hodnota nebo /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Hodnota |
Výsledek testu | /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["cesta"]. Hodnota nebo /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["cesta"]. Hodnota nebo /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["cesta"]. Hodnota |
Poznámka:
Možnost nahrát soubor výsledků testu jako přílohu je výchozí možností ú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 spustit testy:
- Sestavení a testování v kanálu buildu: 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í v kontejneru pomocí souboru Dockeru s více fázemi, například 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. Podívejte se na následující příklad.
Sestavení, testování a publikování výsledků pomocí souboru Dockeru
V tomto přístupu sestavíte kód a spustíte testy uvnitř kontejneru pomocí souboru Dockeru. Výsledky testu se pak zkopírují do hostitele, který se má publikovat do kanálu. K publikování výsledků testu do Azure Pipelines můžete použít publikovat výsledky testů úlohu. Konečná image se publikuje do Dockeru nebo Azure Container Registry.
Získání kódu
V kořenovém adresáři projektu vytvořte soubor
Dockerfile.build
s následujícím kódem:# 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.Pokud chcete, aby byla konečná image co nejmenší, která obsahuje 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 buildu
Pokud máte účet Docker Hubu a chcete odeslat image do registru Dockeru, nahraďte obsah souboru
.vsts-ci.docker.yml
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 službu Azure Container Registry a chcete odeslat image do tohoto registru, nahraďte obsah souboru
.vsts-ci.yml
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)
Nasdílejte změnu do hlavní větve ve vašem úložišti.
Pokud používáte Azure Container Registry, ujistěte se, že jste na webu Azure Portal předem vytvořili registru. Zkopírujte uživatelské jméno a heslo správce uvedené v části Přístupové klíče nastavení registru na webu Azure Portal.
Aktualizujte kanál buildu následujícím kódem:
-
fondu agentů:
Hosted Ubuntu 1604
- dockerId: Nastavte hodnotu na ID Dockeru pro DockerHub nebo uživatelské jméno správce služby Azure Container Registry.
- dockerPassword: Nastavte hodnotu na heslo pro DockerHub nebo heslo správce služby Azure Container Registry.
-
cesta k souboru YAML:
/.vsts-ci.docker.yml
-
fondu agentů:
Zařaďte do fronty nový build a sledujte jeho vytvoření a nasdílení image Dockeru do registru a výsledky testů do Azure DevOps.
Požadavky
Požadavek | Popis |
---|---|
Typy kanálů | YAML, klasické sestavení, klasická verze |
Běží na | Agent, DeploymentGroup |
požadavky | Žádný |
možnosti | Tento úkol nesplňuje žádné požadavky na následné úkoly v úloze. |
omezení příkazů | Jakýkoliv |
nastavitelné proměnné | Jakýkoliv |
Verze agenta | 2.0.0 nebo vyšší |
Kategorie úkolu | Zkouška |