Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Pubblicare i risultati dei test in Azure Pipelines.
Sintassi
# 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.
Ingressi dati
testResultsFormat
-
Formato dei risultati del test
Alias di input: testRunner
.
string
. Obbligatorio. Valori consentiti: JUnit
, NUnit
, VSTest
, XUnit
, CTest
. Valore predefinito: JUnit
Specifica il formato dei file di risultati da pubblicare. Sono supportati i formati seguenti: CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.
Suggerimento
VSTest
format si riferisce al formato TRX. Pertanto, funziona anche se si produce TRX con Microsoft.Testing.Platform (MTP) e non è specifico di VSTest. Il valore è VSTest per motivi storici, prima dell'introduzione di MTP.
testResultsFiles
-
file dei risultati dei test
string
. Obbligatorio. Valore predefinito: **/TEST-*.xml
Specifica uno o più file di risultati del test.
- È possibile usare un carattere jolly a cartella singola (
*
) e i caratteri jolly ricorsivi (**
). Ad esempio,**/TEST-*.xml
cerca tutti i file XML i cui nomi iniziano conTEST-
in tutte le sottodirectory. Se si usa VSTest come formato dei risultati del test, il tipo di file deve essere modificato in.trx
, ad esempio**/TEST-*.trx
- È possibile specificare più percorsi, separati da una nuova riga.
- Accetta inoltre modelli di minimatch.
Ad esempio, !TEST[1-3].xml
esclude i file denominati TEST1.xml
, TEST2.xml
o TEST3.xml
.
searchFolder
-
cartella di ricerca
string
. Valore predefinito: $(System.DefaultWorkingDirectory)
Opzionale. Specifica la cartella in cui cercare i file dei risultati del test.
mergeTestResults
-
Unire i risultati del test
boolean
. Valore predefinito: false
Quando il valore di questo valore booleano è true
, l'attività segnala i risultati del test da tutti i file rispetto a un'unica esecuzione di test . Se il valore è false
, l'attività crea un'esecuzione di test separata per ogni file di risultati del test. Per ottimizzare le prestazioni, i risultati verranno sempre uniti in un'unica esecuzione se sono presenti più di 100 file di risultati, anche se questa opzione è impostata su false
.
Annotazioni
Usare l'impostazione dei risultati del test di merge per combinare file dello stesso framework di test per garantire che il mapping dei risultati e la durata vengano calcolati correttamente.
failTaskOnFailedTests
-
Esito negativo in caso di errori di test
boolean
. Valore predefinito: false
Opzionale. Quando il valore di questo valore booleano è true
, l'attività avrà esito negativo se uno dei test nel file dei risultati è contrassegnato come non riuscito. L'impostazione predefinita è false
, che pubblicherà semplicemente i risultati dal file dei risultati.
failTaskOnFailureToPublishResults
-
Errore in caso di errore nella pubblicazione dei risultati del test
boolean
. Valore predefinito: false
Quando true
, l'attività non riesce se si verifica un errore nella pubblicazione dei risultati del test.
failTaskOnMissingResultsFile
-
Errore se non viene trovato alcun file di risultati
boolean
. Valore predefinito: false
Non riesce l'attività se non viene trovato alcun file di risultati.
testRunTitle
-
Titolo esecuzione test
string
.
Opzionale. Specifica un nome per l'esecuzione del test in base al quale verranno segnalati i risultati. I nomi delle variabili dichiarati nella pipeline di compilazione o versione possono essere usati.
buildPlatform
-
Piattaforma di costruzione
Alias di input: platform
.
string
.
Opzionale. Specifica la piattaforma di compilazione in base alla quale deve essere segnalata l'esecuzione del test. Ad esempio: x64
o x86
. Se è stata definita una variabile per la piattaforma nell'attività di compilazione, usarla qui.
buildConfiguration
-
Configurazione della build
Alias di input: configuration
.
string
.
Opzionale. Specifica la configurazione di compilazione in base alla quale deve essere segnalata l'esecuzione del test. Ad esempio: Debug
o Release
. Se è stata definita una variabile per la configurazione nell'attività di compilazione, usarla qui.
publishRunAttachments
-
Caricare i file dei risultati dei test
boolean
. Valore predefinito: true
Opzionale. Quando il valore di questo valore booleano è true
, l'attività carica tutti i file dei risultati del test come allegati all'esecuzione del test.
Opzioni di controllo delle attività
Tutte le attività hanno opzioni di controllo oltre ai relativi input di attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.
Variabili di uscita
Nessuno.
Osservazioni:
- Prerequisiti
- Impostazioni predefinite delle attività
- Mappatura dei formati dei risultati
- Supporto allegati
Questa attività pubblica i risultati dei test in Azure Pipelines o TFS quando vengono eseguiti i test per offrire un'esperienza completa di creazione di report e analisi dei test. È possibile utilizzare il test runner di propria scelta che supporta il formato dei risultati richiesto. I formati dei risultati supportati includono CTest, JUnit (incluso PHPUnit), NUnit 2, NUnit 3, Visual Studio Test (TRX) e xUnit 2.
Altre attività predefinite, ad esempio l'attività Test di Visual Studio e l'attività dell'interfaccia della riga di comando Dot NetCore , pubblicano automaticamente i risultati dei test nella pipeline. Attività come Ant, Maven, Gulp, Grunt e Xcode forniscono risultati di pubblicazione come opzione all'interno dell'attività o creano librerie come Cobertura e JaCoCo. Se si usa una di queste attività, non è necessaria un'attività Pubblica risultati test separata nella pipeline.
I risultati dei test pubblicati vengono visualizzati nella scheda Test nel riepilogo della pipeline. I risultati consentono di misurare la qualità della pipeline, esaminare la tracciabilità, risolvere i problemi relativi agli errori e gestire la proprietà dei guasti.
Nell'esempio seguente viene illustrata la configurazione dell'attività per la pubblicazione dei risultati dei test.
È anche possibile usare questa attività in una pipeline di compilazione per pubblicare i risultati del code coverage prodotti durante l'esecuzione di test in Azure Pipelines o TFS per ottenere report di copertura.
Prerequisiti
Se si usa un agente self-hosted di Windows, nel computer deve essere installato questo prerequisito:
- .NET Framework 4.6.2 o versione successiva
Impostazioni predefinite delle attività
L'opzione predefinita utilizza il formato JUnit per pubblicare i risultati del test. Quando si utilizza VSTest come testRunner, l'opzione testResultsFiles deve essere modificata in **/TEST-*.trx
.
testResultsFormat è un alias per il nome dell'input testRunner . I file dei risultati possono essere prodotti da più corridori, non solo da un corridore specifico. Ad esempio, il formato dei risultati jUnit è supportato da molti runner e non solo da jUnit.
Per pubblicare i risultati dei test per Python usando YAML, vedere Python nella sezione Ecosistemi di questi argomenti, che include anche esempi per altri linguaggi.
Mappatura dei formati dei risultati
In questa tabella sono elencati i campi riportati nella scheda Test di una compilazione o di un riepilogo della versione e il mapping corrispondente con gli attributi nei formati dei risultati dei test supportati.
Ambito | Campo | Test di Visual Studio (TRX) |
---|---|---|
Prova di funzionamento | Titolo | Titolo dell'esecuzione dei test specificato nell'attività |
Data di inizio | /TestRun/Times.Attributes["inizio"]. Valore | |
Data di completamento | /TestRun/Times.Attributes["fine"]. Valore | |
Durata | Data di completamento - Data di inizio | |
Allegati | Fare riferimento alla sezione Supporto allegati di seguito | |
Risultato del test | Titolo | /TestRun/Results/UnitTestResult.Attributes["testName"]. Valore o /TestRun/Results/WebTestResult.Attributes["testName"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["testName"]. Valore |
Data di inizio | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valore o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valore | |
Data di completamento | /TestRun/Results/UnitTestResult.Attributes["startTime"]. Valore + /TestRun/Results/UnitTestResult.Attributes["duration"]. Valore o /TestRun/Results/WebTestResult.Attributes["startTime"]. Valore + /TestRun/Results/WebTestResult.Attributes["duration"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Valore + /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valore | |
Durata | /TestRun/Results/UnitTestResult.Attributes["duration"]. Valore o /TestRun/Results/WebTestResult.Attributes["duration"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["duration"]. Valore | |
Proprietario | /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["nome"]. Valore | |
Risultato | /TestRun/Results/UnitTestResult.Attributes["risultato"]. Valore o /TestRun/Results/WebTestResult.Attributes["outcome"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["outcome"]. Valore | |
Messaggio di errore | /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText O /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText O /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText | |
Analisi dello stack | /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText O /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText O /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText | |
Allegati | Fare riferimento alla sezione Supporto allegati di seguito | |
Registro della console | /TestRun/Risultati/UnitTestResult/Output/StdOut.InnerText O /TestRun/Results/WebTestResultOutput/Output/StdOut.InnerText O /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText | |
Registro degli errori della console | /TestRun/Risultati/UnitTestResult/Output/StdErr.InnerText O /TestRun/Results/WebTestResultOutput/Output/StdErr.InnerText O /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText | |
Nome agente | /TestRun/Results/UnitTestResult.Attributes["nomecomputer"]. Valore o /TestRun/Results/WebTestResult.Attributes["computerName"]. Valore o /TestRun/Results/TestResultAggregation.Attributes["computerName"]. Valore | |
File di prova | /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. Valore | |
Priorità | /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. Valore |
Annotazioni
La durata viene utilizzata solo quando la data di inizio e la data di completamento non sono disponibili.
Il formato completo del nome per testName è Namespace.Testclass.Methodname con un limite di 512 caratteri. Se il test è basato sui dati e dispone di parametri, il limite di caratteri includerà i parametri.
Durante la pubblicazione del risultato del test, è possibile che venga visualizzato questo errore: Impossibile pubblicare i risultati del test: Priorità specificata non valida
Questo errore si verifica se uno dei metodi di test ha una priorità impostata su 255, correggi la priorità del metodo di test nel codice ed esegui nuovamente i test. È possibile esaminare il file trx generato per visualizzare tutti i test con priorità maggiore di 255.
Supporto allegati
L'attività Pubblica risultati test fornisce il supporto per gli allegati sia per l'esecuzione dei test che per i risultati dei test per i formati seguenti. Per i progetti pubblici, supportiamo 2 GB di allegati totali.
Test di Visual Studio (TRX)
Ambito | TIPO | Percorso |
---|---|---|
Esecuzione di prova | Agente di raccolta dati | /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore |
Risultato del test | /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["percorso"]. Valore | |
Copertura del codice | /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Valore e /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. Valore | |
Risultato del test | Agenti di raccolta dati | /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore o /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore o /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. Valore |
Risultato del test | /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["percorso"]. Valore o /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. Valore o /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. Valore |
Annotazioni
L'opzione per caricare il file dei risultati del test come allegato è un'opzione predefinita nell'attività, applicabile a tutti i formati.
Esempi
Scaricatore
Per le app basate su Docker, esistono molti modi per creare l'applicazione ed eseguire test:
- Compilare e testare in una pipeline di compilazione: le compilazioni e i test vengono eseguiti nella pipeline e i risultati dei test vengono pubblicati usando l'attività Pubblica risultati test .
- Compila e testa con un Dockerfile a più fasi: le compilazioni e i test vengono eseguiti all'interno del contenitore usando un file Docker a più fasi, poiché tali risultati dei test non vengono pubblicati nuovamente nella pipeline.
- Compilare, testare e pubblicare i risultati con un Dockerfile: le compilazioni e i test vengono eseguiti all'interno del contenitore e i risultati vengono pubblicati nuovamente nella pipeline. Vedere l'esempio seguente.
Crea, testa e pubblica i risultati con un file Docker
In questo approccio, si compila il codice ed si eseguono test all'interno del contenitore usando un file Docker. I risultati del test vengono quindi copiati nell'host per essere pubblicati nella pipeline. Per pubblicare i risultati del test in Azure Pipelines, è possibile usare l'attività Pubblica risultati test . L'immagine finale verrà pubblicata in Docker o Registro Azure Container.
Ottenere il codice
Crea un
Dockerfile.build
file nella directory principale del tuo progetto con quanto segue:# 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
Questo file contiene le istruzioni per compilare il codice ed eseguire i test. I test vengono quindi copiati in un file
testresults.trx
all'interno del contenitore.Per rendere l'immagine finale il più piccola possibile, contenente solo gli elementi di runtime e distribuzione, sostituire il contenuto dell'immagine esistente
Dockerfile
con il seguente:# 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"]
Definire la pipeline di compilazione
- YAML
- Classico
Se si dispone di un account Docker Hub e si vuole eseguire il push dell'immagine nel registro Docker, sostituire il
.vsts-ci.docker.yml
contenuto del file con il seguente:# 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)
In alternativa, se si configura un Registro Azure Container e si vuole eseguire il push dell'immagine in tale registro, sostituire il
.vsts-ci.yml
contenuto del file con il seguente:# 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)
Eseguire il push della modifica nel ramo principale del repository.
Se si usa Registro Azure Container, assicurarsi di aver creato in anticipo il registro nel portale di Azure. Copiare il nome utente e la password dell'amministratore visualizzati nella sezione Chiavi di accesso delle impostazioni del Registro di sistema nel portale di Azure.
Aggiorna la pipeline di compilazione con quanto segue
-
Pool di agenti:
Hosted Ubuntu 1604
- dockerId: impostare il valore sull'ID Docker per DockerHub o sul nome utente amministratore per Registro Azure Container.
- dockerPassword: impostare il valore sulla password per DockerHub o sulla password dell'amministratore Azure Container Registry.
-
Percorso del file YAML:
/.vsts-ci.docker.yml
-
Pool di agenti:
Accodare una nuova build e osservarla mentre crea ed esegue il push di un'immagine Docker nel registro e i risultati del test in Azure DevOps.
Requisiti
Requisito | Descrizione |
---|---|
Tipi di pipeline | YAML, build classica, versione classica |
Viene eseguito in | Agente, DeploymentGroup |
Richieste | Nessuno |
Funzionalità | Questa attività non soddisfa alcuna richiesta di attività successive nel processo. |
restrizioni dei comandi | Qualunque |
variabili impostabili | Qualunque |
Versione agente | 2.0.0 o versione successiva |
Categoria attività | Prova |