| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| # Runs Publish Test Results task for a specific framework |
| |
| parameters: |
| testProjectName: '' # The name of the test project |
| framework: '' # The target framework for display purposes. |
| vsTestPlatform: 'x64' # Target platform architecture used for test execution. Valid values are x86, x64, and ARM. |
| osName: '' # The name of the operating system for display purposes. |
| testResultsFormat: VSTest # Specify the format of the results files you want to publish. The following formats are supported: JUnit, NUnit, VSTest, XUnit, CTest |
| testResultsArtifactName: 'testresults' # The name of the Azure DevOps build artifact where the test results will be published. Default 'testresults'. |
| testResultsFileName: 'TestResults.trx' # The name of the file (not path) of the test results. Default 'TestResults.trx'. |
| |
| steps: |
| #- powershell: | |
| # function EnsureNotNullOrEmpty([string]$param, [string]$nameOfParam) { |
| # if ([string]::IsNullOrEmpty($param)) { |
| # Write-Host "##vso[task.logissue type=error;]Missing template parameter \"$nameOfParam\"" |
| # Write-Host "##vso[task.complete result=Failed;]" |
| # } |
| # } |
| # EnsureNotNullOrEmpty('${{ parameters.testProjectName }}', 'testProjectName') |
| # EnsureNotNullOrEmpty('${{ parameters.framework }}', 'framework') |
| # EnsureNotNullOrEmpty('${{ parameters.vsTestPlatform }}', 'vsTestPlatform') |
| # EnsureNotNullOrEmpty('${{ parameters.osName }}', 'osName') |
| # EnsureNotNullOrEmpty('${{ parameters.testResultsFormat }}', 'testResultsFormat') |
| # EnsureNotNullOrEmpty('${{ parameters.testResultsArtifactName }}', 'testResultsArtifactName') |
| # EnsureNotNullOrEmpty('${{ parameters.testResultsFileName }}', 'testResultsFileName') |
| # displayName: 'Validate Template Parameters' |
| |
| #- template: 'show-all-files.yml' # Uncomment for debugging |
| |
| - powershell: | |
| $testResultsFileName = "$(Build.ArtifactStagingDirectory)/${{ parameters.testResultsArtifactName }}/${{ parameters.osName }}/${{ parameters.framework }}/${{ parameters.vsTestPlatform }}/${{ parameters.testProjectName }}/${{ parameters.testResultsFileName }}" |
| $testResultsFileExists = Test-Path $testResultsFileName |
| if ($testResultsFileExists) { |
| |
| $reader = [System.Xml.XmlReader]::Create($testResultsFileName) |
| try { |
| while ($reader.Read()) { |
| if ($reader.NodeType -eq [System.Xml.XmlNodeType]::Element -and $reader.Name -eq 'Counters') { |
| $failed = $reader.GetAttribute('failed') |
| $passed = $reader.GetAttribute('passed') |
| $ignored = (([int]$reader.GetAttribute('total')) - ([int]$reader.GetAttribute('executed'))).ToString() |
| $testResults = "Tests failed: $failed, passed: $passed, ignored: $ignored" |
| Write-Host "##vso[task.setvariable variable=TestResults;]$testResults" |
| # Report a running total of failures |
| $totalFailures = ([int]$Env:TOTALFAILURES + [int]$failed).ToString() |
| Write-Host "##vso[task.setvariable variable=TotalFailures;]$totalFailures" |
| break; |
| } |
| } |
| } finally { |
| $reader.Dispose() |
| } |
| } else { |
| Write-Host "WARNING: File not found: $testResultsFileName" |
| } |
| Write-Host "##vso[task.setvariable variable=TestResultsFileExists;]$testResultsFileExists" |
| displayName: 'Parse Test Results File' |
| |
| - task: PublishTestResults@2 |
| displayName: 'Publish Test Results ${{ parameters.testProjectName }},${{ parameters.framework }},${{ parameters.vsTestPlatform }}' |
| inputs: |
| testResultsFormat: ${{ parameters.testResultsFormat }} |
| testResultsFiles: '$(Build.ArtifactStagingDirectory)/${{ parameters.testResultsArtifactName }}/${{ parameters.osName }}/${{ parameters.framework }}/${{ parameters.vsTestPlatform }}/${{ parameters.testProjectName }}/${{ parameters.testResultsFileName }}' |
| testRunTitle: '${{ parameters.testProjectName }} - ${{ parameters.framework }} - ${{ parameters.vsTestPlatform }} - ${{ parameters.osName }} | $(TestResults)' |
| condition: and(succeeded(), eq(variables['TestResultsFileExists'], 'true')) |