如何在 Invoke-Pester 命令期间在 PowerShell 脚本中动态创建和添加标签?

How can I dynamically create and add tags in PowerShell script during Invoke-Pester command?

我在名为 Behavior.Tests.ps1 的 ps1 文件中有几个 Describe/It 测试。但是,每个测试只能在具有特定硬件的系统上 运行 成功。 我知道我可以在 Invoke-Pester 命令中使用这样的标签:

Invoke-Pester $path -Tag "Acceptance" -ExcludeTag "Flaky", "Slow", "LinuxOnly"

但我不能指望用户知道他们的硬件细节并选择正确的 -Tag 和 -ExcludeTag 来包含。我宁愿为我的工作流程做的只是 Invoke-Pester .\Behavior.Tests.ps1,然后在脚本中有这样的代码,可以获取硬件信息并构建正确的标签列表和 ExcludeTags:

if ($currentHardware -in $HardwareList) {
    $ExcludeTag += $TagFlaky
}

然后我会在第一个 Describe/It 之前有一个 Tags 和 ExcludeTags 列表,这将 运行 在整个 ps1 文件中进行正确的测试。这在 v5 Pester 中可能吗?我试过debug,找参数-Tag修改,没找到

您可以创建包装器 PowerShell 脚本,在调用 Invoke-Pester 之前确定标签,然后您可以使用它来调用具有所需标签的 Pester。

例如:

$ComputerInfo = Get-ComputerInfo

$OS = switch ($ComputerInfo.WindowsProductName) {
    { $_ -match 'Windows 10' } { 'Win10' }
    { $_ -match 'Windows 8' { { 'Win8' }
    { $_ -match 'Linux' } { 'Linux' }
}

$Processor = switch ($ComputerInfo.CsProcessors.Name) {
    { $_ -match 'Intel' } { 'Intel' }
    { $_ -match 'ARM' } { 'ARM' }
}

Invoke-Pester $Path -Tag $OS,$Processor