PowerShell Pester:实现内外数据测试及解决摘要拆分、配置传递问题
Pester测试问题解决:统一摘要、配置传递与容器优化
问题1:测试摘要拆分
嵌套调用Invoke-Pester会导致每个容器生成独立的测试摘要,无法合并统计。核心解决思路是避免嵌套调用Pester,将所有测试资源(普通测试文件+数据驱动容器)统一在顶层Invoke-Pester中执行。
调整方案
直接在顶层运行时,同时指定普通测试文件和数据容器:
# 顶层执行脚本/控制台命令 $values = 'value', 'not value' $containers = $values | ForEach-Object { New-PesterContainer -Path "$PSScriptRoot/ExternalData.ps1" -Data @{ Param = $_ } } # 同时加载普通测试文件和数据驱动容器 Invoke-Pester -Path "$PSScriptRoot/NonDataExternal.Tests.ps1" -Container $containers
执行后,所有测试结果会合并为一个统一摘要,输出符合你期望的格式:
Tests Passed: 2, Failed: 1, Skipped: 0 NotRun: 0
问题2:配置传递
如果因特殊需求必须保留嵌套调用,可将顶层的PesterConfiguration对象传递给内部Invoke-Pester:
# Invoke-ExternalData.Tests.ps1 调整后代码 $config = Get-PesterConfiguration # 根据需求修改配置项,例如调整输出详细程度 $config.Output.Verbosity = 'Detailed' $values = 'value', 'not value' $containers = $values | ForEach-Object { New-PesterContainer -Path "$PSScriptRoot/ExternalData.ps1" -Data @{ Param = $_ } } Invoke-Pester -Container $containers -Configuration $config
更优方案是在顶层统一配置,无需嵌套调用:顶层Invoke-Pester的配置会自动应用到所有测试文件和容器,从根源避免配置传递的麻烦。
PesterContainer最优用法
完全不需要通过嵌套调用Invoke-Pester传递容器。直接在顶层Invoke-Pester中同时指定:
-Path:普通测试文件(如NonDataExternal.Tests.ps1)-Container:数据驱动的容器集合
所有测试会在同一个Pester会话中执行,自动合并结果、共享配置,彻底解决摘要拆分和配置传递问题。
内容的提问来源于stack exchange,提问作者Yorai Levi
相关产品推荐
相关产品推荐

