2 min read

Pester CI/CD Integration and XML Reports

Integrating Pester tests into a CI/CD pipeline (like Azure DevOps, GitHub Actions, or GitLab CI) requires generating machine-readable reports. Pester 5+ (standard in PowerShell 7+) uses a configuration object to handle this efficiently.

Parent Topic: Pester Testing in PowerShell Related: Pester Code Coverage

1. The Pester Configuration Object

For advanced scenarios like CI/CD, Invoke-Pester with simple parameters isn't enough. You should use New-PesterConfiguration.

$config = New-PesterConfiguration
$config.Run.Path = ".\Tests"
$config.Run.Exit = $true
$config.Output.Verbosity = "Detailed"

2. Generating Test Results (NUnit/JUnit XML)

Most CI platforms consume NUnit or JUnit XML files to display test results in their UI.

$config.TestResult.Enabled = $true
$config.TestResult.OutputFormat = "NUnitXml"
$config.TestResult.OutputPath = ".\TestResults.xml"

3. Generating Code Coverage Reports (JaCoCo XML)

To visualize code coverage in tools like Codecov or Azure DevOps, you need a coverage report, typically in JaCoCo format.

$config.CodeCoverage.Enabled = $true
$config.CodeCoverage.OutputFormat = "JaCoCo"
$config.CodeCoverage.OutputPath = ".\coverage.xml"
$config.CodeCoverage.Path = ".\Src" # Path to source files to measure

4. Complete CI Script Example

Here is a robust script (Build.ps1) suitable for a CI pipeline running on PowerShell 7+.

# Build.ps1

# 1. Create Configuration
$config = New-PesterConfiguration

# 2. Configure Run
$config.Run.Path = ".\Tests"
$config.Run.Exit = $true # Exit with non-zero code if tests fail

# 3. Configure Test Results (NUnit XML)
$config.TestResult.Enabled = $true
$config.TestResult.OutputFormat = "NUnitXml"
$config.TestResult.OutputPath = ".\Artifacts\TestResults.xml"

# 4. Configure Code Coverage (JaCoCo XML)
$config.CodeCoverage.Enabled = $true
$config.CodeCoverage.OutputFormat = "JaCoCo"
$config.CodeCoverage.OutputPath = ".\Artifacts\coverage.xml"
$config.CodeCoverage.Path = ".\Src"

# 5. Execute
Invoke-Pester -Configuration $config

Return to Pester Testing in PowerShell