提供测试用例给 Pester V5 测试
Providing test cases to Pester V5 test
我正在尝试编写 pester 测试 (v5) 以查看远程计算机上是否有各种服务 运行。这就是我所拥有的,它有效:
$Hashtable = @(
@{ ComputerName = "computer1"; ServiceName = "serviceA" }
@{ ComputerName = "computer1"; ServiceName = "serviceB" }
@{ ComputerName = "computer2" ; ServiceName = "serviceB" }
)
Describe "Checking services" {
It "check <ServiceName> is running on <ComputerName>" -TestCases $Hashtable {
( get-service -computername $ComputerName -name $ServiceName ).status | Should -be "Running"
}
}
我的问题是关于向测试提供测试数据(即计算机名称和服务列表)。假设我想向这个列表中添加更多服务。目前,我将通过向 $Hashtable 添加更多服务来修改我的 pester 文件。对我这样做感觉不太对,我想在这个早期阶段就把方法弄对。我的直觉告诉我,服务列表应该与 pester 文件分开。然后 运行 测试将涉及以某种方式导入服务列表。有谁知道我是否以错误的方式解决这个问题?
谢谢你的帮助
安德鲁
如果服务器和服务列表经常变化,最好从单独的文件中读取它,尤其是当您的测试处于版本控制之下时。这样你可以很容易地看到历史中只有测试数据发生了变化,而测试逻辑没有变化。
给定测试数据的良好文件格式为 CSV:
ComputerName, ServiceName
computer1, serviceA
computer1, serviceB
computer2, serviceB
您可以使用 Import-Csv
读取 CSV,但您必须将每一行转换为 hashtable
,因为 Pester 需要一个用于 -TestCases
参数的哈希表数组。 Import-Csv
输出 PSCustomObject
的数组。
BeforeDiscovery {
$script:testCases = Import-Csv $PSScriptRoot\TestCases.csv | ForEach-Object {
# Convert row (PSCustomObject) to hashtable.
$hashTable = @{}
$_.PSObject.Properties | ForEach-Object { $hashTable[ $_.Name ] = $_.Value }
# Implicit output that will be captured in array $script:testCases
$hashTable
}
}
Describe "Checking services" {
It "check <ServiceName> is running on <ComputerName>" -TestCases $script:testCases {
( get-service -computername $ComputerName -name $ServiceName ).status | Should -be "Running"
}
}
注意: 虽然不是绝对必要,但我已按照 docs 的建议将读取测试用例的代码放入 BeforeDiscovery
部分。这使我们的意图很明确。
我正在尝试编写 pester 测试 (v5) 以查看远程计算机上是否有各种服务 运行。这就是我所拥有的,它有效:
$Hashtable = @(
@{ ComputerName = "computer1"; ServiceName = "serviceA" }
@{ ComputerName = "computer1"; ServiceName = "serviceB" }
@{ ComputerName = "computer2" ; ServiceName = "serviceB" }
)
Describe "Checking services" {
It "check <ServiceName> is running on <ComputerName>" -TestCases $Hashtable {
( get-service -computername $ComputerName -name $ServiceName ).status | Should -be "Running"
}
}
我的问题是关于向测试提供测试数据(即计算机名称和服务列表)。假设我想向这个列表中添加更多服务。目前,我将通过向 $Hashtable 添加更多服务来修改我的 pester 文件。对我这样做感觉不太对,我想在这个早期阶段就把方法弄对。我的直觉告诉我,服务列表应该与 pester 文件分开。然后 运行 测试将涉及以某种方式导入服务列表。有谁知道我是否以错误的方式解决这个问题? 谢谢你的帮助 安德鲁
如果服务器和服务列表经常变化,最好从单独的文件中读取它,尤其是当您的测试处于版本控制之下时。这样你可以很容易地看到历史中只有测试数据发生了变化,而测试逻辑没有变化。
给定测试数据的良好文件格式为 CSV:
ComputerName, ServiceName
computer1, serviceA
computer1, serviceB
computer2, serviceB
您可以使用 Import-Csv
读取 CSV,但您必须将每一行转换为 hashtable
,因为 Pester 需要一个用于 -TestCases
参数的哈希表数组。 Import-Csv
输出 PSCustomObject
的数组。
BeforeDiscovery {
$script:testCases = Import-Csv $PSScriptRoot\TestCases.csv | ForEach-Object {
# Convert row (PSCustomObject) to hashtable.
$hashTable = @{}
$_.PSObject.Properties | ForEach-Object { $hashTable[ $_.Name ] = $_.Value }
# Implicit output that will be captured in array $script:testCases
$hashTable
}
}
Describe "Checking services" {
It "check <ServiceName> is running on <ComputerName>" -TestCases $script:testCases {
( get-service -computername $ComputerName -name $ServiceName ).status | Should -be "Running"
}
}
注意: 虽然不是绝对必要,但我已按照 docs 的建议将读取测试用例的代码放入 BeforeDiscovery
部分。这使我们的意图很明确。