在 Powershell 中处理数组(使用 Pester 进行测试)
Dealing with Arrays in Powershell (testing with Pester)
我不太理解实现这个过程的方式。我想在分数中获得总计数,以便如果测试成功通过或失败,则可以将其添加到数组中。该数组将计入长度。
这是我的代码示例:
#This stores the array of the number of passed and failed test
$passed = @()
$failed = @()
Describe "Template Syntax" {
It "Has a JSON template" {
$fileLocation = "$here\azuredeploy.json"
$fileCheck = $fileLocation | Test-Path
if ($fileCheck -eq $true) { $passed = $passed + 1
Write-Host "1st file exist " }
if ($fileCheck -eq $false) { $failed = $failed + 1
Write-Host "1st file does exist" }
}
It "Has a parameters file" {
$fileLocation ="$here\azuredeploy.parameters*.json"
$fileCheck = $fileLocation | Test-Path
if ($fileCheck -eq $true) { $passed = $passed + 1;
Write-Host "2nd file exist "}
if ($fileCheck -eq $false) { $failed = $failed + 1
Write-Host "2nd file does exist" }
}
PrintArgs
}
function PrintArgs(){
Write-Host -ForegroundColor yellow "Passed: $($passed.Length) Failed: $($failed.Length)"
}
我可以通过其他方式或其他方法来实现这一目标吗?我知道 pester 会自动执行此操作,但是,我想使用 Powershell 脚本进行测试。
看你的代码,你不需要数组来计算分数。
不要将 $passed
和 $failed
定义为数组,只需将它们设置为起始值为 0
的整数计数器
$passed = $failed = 0
然后 不用调用 函数 PrintArgs() 你只需做
Write-Host -ForegroundColor yellow "Passed: $passed Failed: $failed"
顺便说一句,要增加计数器,您可以简单地执行 $passed++
而不是 $passed = $passed + 1
如果您坚持使用数组,您可以将 $passed = $passed + 1
更改为 $passed += $true
之类的内容。通过这样做,您可以向数组中添加一个值为 $true 的新元素(或您认为更合适的任何值。
除非您包含 Should
断言,否则您的 Pester 测试并不是真正的 Pester 测试。我认为您应该按如下方式重写测试:
Describe "Template Syntax" {
$fileLocation = "$here\azuredeploy.json"
$fileCheck = $fileLocation | Test-Path
It "Has a JSON template" {
$fileCheck | Should -Be $true
}
$fileLocation ="$here\azuredeploy.parameters*.json"
$fileCheck = $fileLocation | Test-Path
It "Has a parameters file" {
$fileCheck | Should -Be $true
}
}
如果您然后 运行 使用 Invoke-Pester
,您会在最后自动获得通过和失败测试计数的摘要。如果您需要访问这些值,您可以使用 -PassThru
到 return 它们到一个变量。例如:
$Results = Invoke-Pester .\your.tests.ps1 -PassThru
然后可以得到通过和失败的测试次数如下:
$Results.PassedCount
$Results.FailedCount
如果您真的想使用自己的计数器(这意味着要保留很多不必要的逻辑),您可以执行以下操作:
$Passed = 0
$Failed = 0
Describe "Template Syntax" {
$fileLocation = "$here\azuredeploy.json"
$fileCheck = $fileLocation | Test-Path
It "Has a JSON template" {
$fileCheck | Should -Be $true
}
if ($fileCheck -eq $true) { $Passed++ } else { $Failed++ }
$fileLocation ="$here\azuredeploy.parameters*.json"
$fileCheck = $fileLocation | Test-Path
It "Has a parameters file" {
$fileCheck | Should -Be $true
}
if ($fileCheck -eq $true) { $Passed++ } else { $Failed++ }
Write-Host -ForegroundColor yellow "Passed: $Passed Failed: $Failed"
}
请注意,Describe
块充当一种脚本范围,因此您必须在 Describe
中打印 $Passed
和 $Failed
的值以获得在值。
我不太理解实现这个过程的方式。我想在分数中获得总计数,以便如果测试成功通过或失败,则可以将其添加到数组中。该数组将计入长度。
这是我的代码示例:
#This stores the array of the number of passed and failed test
$passed = @()
$failed = @()
Describe "Template Syntax" {
It "Has a JSON template" {
$fileLocation = "$here\azuredeploy.json"
$fileCheck = $fileLocation | Test-Path
if ($fileCheck -eq $true) { $passed = $passed + 1
Write-Host "1st file exist " }
if ($fileCheck -eq $false) { $failed = $failed + 1
Write-Host "1st file does exist" }
}
It "Has a parameters file" {
$fileLocation ="$here\azuredeploy.parameters*.json"
$fileCheck = $fileLocation | Test-Path
if ($fileCheck -eq $true) { $passed = $passed + 1;
Write-Host "2nd file exist "}
if ($fileCheck -eq $false) { $failed = $failed + 1
Write-Host "2nd file does exist" }
}
PrintArgs
}
function PrintArgs(){
Write-Host -ForegroundColor yellow "Passed: $($passed.Length) Failed: $($failed.Length)"
}
我可以通过其他方式或其他方法来实现这一目标吗?我知道 pester 会自动执行此操作,但是,我想使用 Powershell 脚本进行测试。
看你的代码,你不需要数组来计算分数。
不要将 $passed
和 $failed
定义为数组,只需将它们设置为起始值为 0
$passed = $failed = 0
然后 不用调用 函数 PrintArgs() 你只需做
Write-Host -ForegroundColor yellow "Passed: $passed Failed: $failed"
顺便说一句,要增加计数器,您可以简单地执行 $passed++
而不是 $passed = $passed + 1
如果您坚持使用数组,您可以将 $passed = $passed + 1
更改为 $passed += $true
之类的内容。通过这样做,您可以向数组中添加一个值为 $true 的新元素(或您认为更合适的任何值。
除非您包含 Should
断言,否则您的 Pester 测试并不是真正的 Pester 测试。我认为您应该按如下方式重写测试:
Describe "Template Syntax" {
$fileLocation = "$here\azuredeploy.json"
$fileCheck = $fileLocation | Test-Path
It "Has a JSON template" {
$fileCheck | Should -Be $true
}
$fileLocation ="$here\azuredeploy.parameters*.json"
$fileCheck = $fileLocation | Test-Path
It "Has a parameters file" {
$fileCheck | Should -Be $true
}
}
如果您然后 运行 使用 Invoke-Pester
,您会在最后自动获得通过和失败测试计数的摘要。如果您需要访问这些值,您可以使用 -PassThru
到 return 它们到一个变量。例如:
$Results = Invoke-Pester .\your.tests.ps1 -PassThru
然后可以得到通过和失败的测试次数如下:
$Results.PassedCount
$Results.FailedCount
如果您真的想使用自己的计数器(这意味着要保留很多不必要的逻辑),您可以执行以下操作:
$Passed = 0
$Failed = 0
Describe "Template Syntax" {
$fileLocation = "$here\azuredeploy.json"
$fileCheck = $fileLocation | Test-Path
It "Has a JSON template" {
$fileCheck | Should -Be $true
}
if ($fileCheck -eq $true) { $Passed++ } else { $Failed++ }
$fileLocation ="$here\azuredeploy.parameters*.json"
$fileCheck = $fileLocation | Test-Path
It "Has a parameters file" {
$fileCheck | Should -Be $true
}
if ($fileCheck -eq $true) { $Passed++ } else { $Failed++ }
Write-Host -ForegroundColor yellow "Passed: $Passed Failed: $Failed"
}
请注意,Describe
块充当一种脚本范围,因此您必须在 Describe
中打印 $Passed
和 $Failed
的值以获得在值。