PowerShell 仓库 Pester 测试指南:运行、编写与维护跨平台用例

发布时间:2026/10/26 7:51:20

PowerShell 仓库 Pester 测试指南:运行、编写与维护跨平台用例 PowerShell 仓库 Pester 测试指南运行、编写与维护跨平台用例【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell本指南以仓库 test/powershell/README.md 为骨架系统讲解 PowerShell 仓库中 Pester 测试的执行方式、子进程启动规范、跨平台跳过策略与 Pending 约定。读者完成阅读后将掌握用Start-PSPester运行与筛选整套 CI 测试、在用例内安全启动开发版pwsh子进程、用-Skip/-Pending正确表达平台不适用与应当通过但暂未通过两类状态并把新用例放置到正确的测试目录。PowerShell 仓库的 Pester 测试规模庞大从引擎、语言解析器到各内置模块均有覆盖这些用例同时运行于 Windows、Linux 与 macOS 的 CI 之上因此对可移植性、进程隔离与状态表达有一套严格的约定。理解 Writing Pester Tests由本 README 显式交叉引用能进一步补齐编写侧的规范。运行 Pester 测试Start-PSPester 入口仓库约定先自行构建一份自托管self-hostedPowerShell然后在仓库根目录、于该自托管 PowerShell 会话中执行Start-PSPester。Import-Module ./build.psm1 Start-PSPesterStart-PSPester定义在 build.psm1其默认行为是启动刚构建好的pwsh进程导入 Pester 模块并对默认路径test/powershell下的用例执行Invoke-Pester最终以 NUnit XML 格式写出结果文件默认pester-tests.xml。关键默认参数如下参数默认值说明Path位置 0test/powershell一个或多个测试文件/目录路径TagCI,Feature只运行带这些标签的用例ExcludeTagSlow排除的标签会按提权状态自动追加OutputFormatNUnitXmlPester 输出格式供 CI 消费OutputFilepester-tests.xmlXML 结果文件路径Start-PSPester的Path参数还内置了针对*.tests.ps1的 Tab 补全见 build.psm1 的ArgumentCompleter可以快速从命令行定位目标测试文件。限定运行范围仓库文档中给出了两种限定方式test/powershell/README.md 记载的写法是按名称模式过滤Start-PSPester -Tests SomeTestSuite*根目录测试文档与当前 build.psm1 实现统一使用Path位置 0参数指定目录或文件例如 testing-guidelines.md 中的示例# 运行某个目录下的所有用例 Start-PSPester -Path test/powershell/engine/Api # 或只运行某一个测试文件 Start-PSPester -Path test/powershell/engine/Api/XmlAdapter.Tests.ps1在较新实现中优先采用-Path写法-Path既接受目录也接受具体.tests.ps1文件。运行器在幕后做了什么从 build.psm1 的实现可以看到Start-PSPester会构造一条完整的启动命令并交给刚构建好的pwsh去执行其中包括几项对测试正确性至关重要的动作设置遥测退出以$env:POWERSHELL_TELEMETRY_OPTOUT yes启动避免测试受外部网络遥测行为干扰注入测试模块路径把临时测试模块目录前置到子进程的PSModulePath使测试用模块可被自动加载Windows 下调低执行策略Set-ExecutionPolicy -Scope Process Unrestricted规避默认Restricted策略对测试脚本的拦截按提权状态动态调整标签非管理员 Windows 会话自动追加排除RequireAdminOnWindowsUnix 非 sudo 会话自动追加排除RequireSudoOnUnix见 build.psm1始终携带-noprofile启动build.psm1这正是下面一节要展开的规范。在用例内启动新的 pwsh 子进程-noprofile 与开发版定位许多集成类测试需要再启动一个全新的powershell进程来验证命令行行为。此时必须遵守两条铁律必须带-noprofile用户的、系统的、被改动过的 profile 一旦被加载会污染测试环境导致用例在不该失败时失败。这正是上一节Start-PSPester自己也坚持用-noprofile启动子进程的原因——同一约定贯穿运行器与用例两个层面必须调用开发版 PowerShell而非 PATH 中的第一个本机很可能同时装有正式发布版pwsh直接写pwsh会执行到错误解释器。正确做法是基于当前会话的$PsHome拼接出可执行文件路径——正在运行的正是开发版从它的目录派生子进程就能保证测试的是当前构建。README 给出的标准范例$powershell Join-Path -Path $PsHome -ChildPath pwsh $powershell -noprofile -command ExampleCommand | Should Be ExampleOutput注意 Windows 上实际的可执行文件名是pwsh.exe而统一写成pwsh在两侧均可解析Unix 无扩展名、Windows 上按扩展名自动补全若你所在分支要求更严格的写法可显式区分平台。这一模式在真实用例中大量落地例如 test/powershell/Host/Base-Directory.Tests.ps1 $powershell -noprofile -c $PROFILE | Should -Be $expectedProfile $powershell -noprofile -c $env:PSModulePath $powershell -noprofile { (Get-PSReadLineOption).HistorySavePath } | Should -Be $expectedReadline $powershell -noprofile { exit }这些用例通过-noprofile干净地探测子进程在零 profile 影响下的$PROFILE、PSModulePath、PSReadLine 配置与退出行为——任何一条规则被破坏例如落到系统已装版本的 pwsh断言都会失真。此外根目录测试文档 testing-guidelines.md 也提示即便只是在本机运行测试也应确保外层 PowerShell 以-noprofile启动因为非默认环境可能导致部分用例失败。可移植性用 -Skip 表达平台专属仓库测试需要跑在 Windows、Linux、macOS 三种平台上因此存在大量仅在某个平台有效的用例。约定是不要删除或改写它们而是通过 Pester 的-Skip参数配合跨平台自动变量$IsWindows、$IsLinux、$IsMacOS在运行时决定是否执行。仅在 Windows 上运行的写法It Should do something on Windows -Skip:($IsLinux -Or $IsMacOS) { ... }仅在 Linux / macOS 上运行的写法It Should do something on Linux -Skip:$IsWindows { ... }真实仓库中有大量同款实践。例如 Windows 专属的执行策略用例 test/powershell/Modules/Microsoft.PowerShell.Security/ExecutionPolicy.Tests.ps1It Should return Microsoft.Powershell.ExecutionPolicy PSObject on Windows -Skip:($IsLinux -Or $IsMacOS) { ... } It Should succeed on Windows -Skip:($IsLinux -Or $IsMacOS) { ... }文件系统层面的跨平台差异也会用同一手法处理如 test/powershell/Modules/Microsoft.PowerShell.Management/Add-Content.Tests.ps1 中对不支持某 Provider 的平台显式跳过。整块跳过$PSDefaultParameterValues 技巧当某个Describe内的用例整块不适用于某平台时逐个加-Skip会显得啰嗦。WritingPesterTests.md 提供了基于$PSDefaultParameterValues的批量跳过方案在BeforeAll中条件性地把It:skip置为$true并在AfterAll中恢复原始值从而使整个Describe含其下所有Context/It在非目标平台上报告为 Skipped 而非 Failed。这与逐条-Skip的语义一致但更易维护。与标签机制的分工除了-Skip仓库还通过Pester 标签管理需要特殊权限的用例详见 WritingPesterTests.md 的 Admin privileges in tests需要 Windows 管理员权限的用例标记为RequireAdminOnWindows需要 Unix 下sudo的用例标记为RequireSudoOnUnix该标签优先于CI/Feature等其他标签。CI 会分两轮执行常规轮次排除这些用例专用轮次只运行它们。Start-PSPester在 build.psm1 中按当前会话是否提权自动向ExcludeTag追加对应标签使未提权的本地运行与 CI 表现一致也避免无权用例直接红掉。Pending标记应当通过却暂未通过的用例与-Skip平台不适用、不应运行不同仓库还约定了一种状态表达测试本身写得没问题、理应通过但因为某个未解决的缺陷暂时失败。此时既不能删除用例也不要用-Skip悄悄跳过而应使用 PendingIt Should Pass -PendingPending 会在结果报告中以独立状态呈现时刻提醒维护者该用例背后还有未关闭的缺陷同时按 README 的约定应当就阻塞原因在项目问题跟踪中登记一条 issue保证有人负责、可追踪。真实仓库中能看到两种 Pending 形态静态-Pending例如 test/powershell/Host/Base-Directory.Tests.ps1 的It Can start in directory where name contains wildcard characters -Pending条件式与Set-ItResult例如 test/powershell/Host/ConsoleHost.Tests.ps1 中使用Set-ItResult -Pending -Because ...在用例体内根据运行时事实动态置为 Pending以及-Pending:($IsWindows)ConsoleHost.Tests.ps1把条件化的 Pending 与平台判断结合。编写用例的基本规范速览README 所链接的 WritingPesterTests.md 是仓库内编写用例的权威细则以下是与本主题强相关的要点供对照自查文件命名描述性名称.tests.ps1例如XmlAdapter.Tests.ps1Describe 必须打标签Describe需在CI、Feature、Scenario三选一未打标签会被构建过程直接判失败。CI单元级、秒级完成、Feature定期跑的功能级、Scenario不定期跑的跨功能集成级三者层层放大范围断言风格基础值断言用Should -Be类型检查用Should -BeOfType System.Int32预期报错用Should -Throw -ErrorId比消息更稳不随文化/语言变化需要深入检查 ErrorRecord 成员时配合-PassThru取回错误对象作用域结构Describe内定义的Mock与TestDrive:内容随块退出而清理Context是更细的分组层级BeforeAll/BeforeEach/AfterEach/AfterAll用于搭建与拆除避免在Describe中散落自由代码其执行时机极易被误解文件隔离涉及文件操作时一律使用 Pester 内置的TestDrive:即$TestDrive测试结束后由 Pester 自动清空避免对仓库与用户目录产生副作用测试驱动数据多组输入输出用It ... -TestCases $testCases驱动配合描述性用例名跨平台纪律避免依赖注册表与 COM避免断言平台间天然变化的资源计数如加载的格式化文件数量多行字符串比较需先规范化行尾Windows 为\r\nUnix 为\n且受 clone 的 git 配置影响。测试目录布局新用例放对位置按 testing-guidelines.md 的功能化布局约定Pester 测试统一位于 test/powershell 下engine引擎级测试其下细分为 Api、Basic、ETS扩展类型系统、Help、Logging、Module、ParameterBinding、Remoting 等子目录Host控制台宿主相关含 TabCompletion、Base-Directory、ConsoleHost 等用例前述子进程启动示例正来自此处Language语言与解析相关Modules按内置模块组织如Microsoft.PowerShell.Security、Microsoft.PowerShell.Management等修某模块 cmdlet 时用例应放进对应模块目录Provider、SDK、dsc 等分别对应 Provider、托管 SDK 与 DSC 场景。此外构建/CI 运行器 build.psm1 还支持通过-IncludeFailingTest、-IncludeCommonTests额外引入tools/failingTests与test/common下的用例方便把已知失败清单与通用用例一并纳入本地验证。小结遵循上述约定即可获得本地即 CI的一致体验用Start-PSPester必要时以-Path收窄范围跑整套或局部用例在测试内部派生新pwsh时坚持从$PsHome定位开发版并强制-noprofile用-Skip配合$IsWindows/$IsLinux/$IsMacOS表达平台差异用RequireAdminOnWindows/RequireSudoOnUnix标签表达权限差异用-Pending诚实记录尚未修复的缺陷并关联 issue最后把新用例按功能放进 test/powershell 对应的子目录并为每个Describe打上CI/Feature/Scenario标签。这套方法论既是仓库内部 CI 的根基也是为 PowerShell 这类跨平台语言运行时贡献测试时最值得复用的工程范式。【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/27 4:32:56

YOLO26中C3k2与AKConv融合的目标检测优化

1. 项目概述:YOLO26的C3k2模块与AKConv创新融合在目标检测领域,YOLO系列算法始终保持着迭代创新的步伐。这次我们要探讨的是YOLO26架构中一个关键改进:将C3k2模块与AKConv(可变核卷积)进行深度融合。这种组合为卷积神经…

2026/10/27 4:32:56

医学图像分割:U-Net变体与多模态融合技术解析

1. 医学图像分割的临床价值与技术挑战在放射科医生的日常工作中,CT和MRI影像的解读往往需要耗费大量时间。以肝脏肿瘤诊断为例,医生需要手动勾画数百张切片中的病灶区域,这个过程通常需要3-4小时。而采用U-Net及其变体构建的自动分割系统&…

2026/10/27 4:32:56

子树覆盖率:提升代码测试深度的关键技术

1. 子树覆盖率(Subtree Coverage)概念解析子树覆盖率(Subtree Coverage)是程序分析与软件测试领域的一个重要指标,它衡量的是测试用例对程序抽象语法树(AST)中子树结构的覆盖程度。简单来说&…

2026/10/27 4:32:56

Python对象构造:__new__与__init__的深度解析

1. Python中的对象构造双阶段:__new__与__init__的本质差异当你在Python中写下obj MyClass()时,解释器实际上执行了两个关键步骤:首先调用__new__创建对象内存空间,然后通过__init__初始化对象属性。这个看似简单的实例化过程&am…

2026/10/27 4:27:56

Java开发者指南:Milvus与Chroma向量数据库集成实践

1. 为什么Java开发者需要关注向量数据库集成在当今AI驱动的开发环境中,Java开发者正面临一个关键转折点。传统的关系型数据库在处理向量数据时显得力不从心,而像Milvus和Chroma这样的专用向量数据库正在成为开发生态中的重要组成部分。作为Java技术栈的实…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑