Run Pester 5 tests in Azure Pipelines and publish test results
The brevity of the Migrating from Pester v4 to v5 documentation belies just how much has changed - something that took a fair bit of trial and error for me was getting Pester 5 test results published in an Azure Pipelines run.
Assuming you have your tests located in a tests
folder, the pipeline definition needed to run the tests and publish the results is below.
I could have used
Invoke-Pester -Path tests
, but I frequently find tests which use relative paths, and so invoking them from the correct folder is easier.
# /pipelines/azure-pipelines.yml
pool:
vmImage: windows-2019
steps:
- task: PowerShell@2
displayName: "Run Pester tests"
inputs:
targetType: "inline"
script: |
Set-Location ./tests
Invoke-Pester -CI
ignoreLASTEXITCODE: true
- task: PublishTestResults@2
inputs:
testResultsFormat: "NUnit"
testResultsFiles: "**/Test*.xml"
failTaskOnFailedTests: true
testRunTitle: "Validate Task Files"
The -CI
argument to Invoke-Pester
will save test results in an xml file (NUnitXML compatible) in the same folder. It will also set the exit code of the process to the number of failed tests, which is problematic as any non-zero exit code will abort the pipeline by default. To ensure our pipeline continues when tests fail, we set ignoreLASTEXITCODE
on the PowerShell task. To stop the pipeline in the presence of failed tasks we use the failTaskOnFailedTests
property of the Publish Test Results task.
In the example below, I'm running the Test-FolderTask function of tSqlScheduler, and as you can see when I break the build on purpose, the tests fail 😊.