1

我正在 Pester 中进行一些基础设施测试,并且存在重复的场景,我不知道如何处理。

假设,我想检查是否在 IIS 上启用了所有必需的 Web 角色。我有一组必需的 Web 角色,我想为每个角色声明它已启用。

我当前的代码如下所示:

$requiredRoles = @(
    "Web-Default-Doc",
    "Web-Dir-Browsing",
    "Web-Http-Errors",
    "Web-Static-Content",
    "Web-Http-Redirect"
)

Context "WebRoles" {

    It "Has installed proper web roles" {

        $requiredRoles  | % {
            $feature = Get-WindowsOptionalFeature -FeatureName $_ -online
            $feature.State | Should Be "Enabled"
        }
    }
}

如果未启用/安装任何角色,则测试将失败。但是,如果这种 Pester 测试的输出如下所示,那几乎没有用处:

Context WebRoles
[-] Has installed proper web roles 2.69s
  Expected: {Enabled}
  But was:  {Disabled}
  283:                 $feature.State | Should Be "Enabled" 

这个结果没有提供任何关于哪个功能是禁用的任何线索。

在这些情况下有什么推荐的做法吗?我在考虑一些字符串操作......

Context "WebRoles" {

    It "Has installed proper web roles" {

        $requiredRoles  | % {
            $feature = Get-WindowsOptionalFeature -FeatureName $_ -online
            $toCompare = "{0}_{1}" -f $feature.FeatureName,$feature.State 
            $toCompare | Should Be ("{0}_{1}" -f $_,"Enabled")
        }
    }
 }

这将输出:

Context WebRoles
[-] Has installed proper web roles 2.39s
  Expected string length 27 but was 28. Strings differ at index 20.
  Expected: {IIS-DefaultDocument_Enabled}
  But was:  {IIS-DefaultDocument_Disabled}
  -------------------------------^
  284:                 $toCompare | Should Be ("{0}_{1}" -f $_,"Enabled")

...哪个更好,但感觉不是很好...

此外,第二个问题是测试将在第一次失败时停止,我需要在修复每个功能后重新运行测试......

有任何想法吗?

4

1 回答 1

2

像这样把你It的循环放在里面:

Context "WebRoles" {
  $requiredRole | ForEach-Object {
    It "Has installed web role $_" {
      (Get-WindowsOptionalFeature -FeatureName $_ -online).State | Should Be "Enabled"
    }
  }  
}
于 2017-05-22T10:11:56.000 回答