gpt4 book ai didi

PowerShell 纠缠模拟 Rest API 调用

转载 作者:行者123 更新时间:2023-12-04 13:07:58 27 4
gpt4 key购买 nike

是否有任何简单的方法来模拟 Pester 中的 Rest API 调用

这是我的代码,我只需要模拟那些 Pester 中的 Rest API 调用 并测试它们,有人可以帮我吗。

Describe 'Test worldclockapi.com' {
BeforeAll {
$response = Invoke-WebRequest -Method 'GET' -Uri 'http://worldclockapi.com/api/json/utc/now'
$responseContent = $response.Content | ConvertFrom-Json
Write-Output $responseContent
}

It 'It should respond with 200' {
$response.StatusCode | Should -Be 200
}

It 'It should have a null service response' {
$responseContent.serviceResponse | Should -BeNullOrEmpty
}

It 'It should be the right day of the week' {
$dayOfWeek = (Get-Date).DayOfWeek
$responseContent.dayOfTheWeek | Should -Be $dayOfWeek
}

It 'It should be the right year' {
$year = Get-Date -Format 'yyyy'
$responseContent.currentDateTime | Should -BeLike "*$year*"
}

It 'It should be the right month' {
$month = Get-Date -Format 'MM'
$responseContent.currentDateTime | Should -BeLike "*$month*"
}

# These two tests assume you are running this outside daylight savings (during the winter) .. hacky but good way to showcase the syntax ;)
It 'It should not be daylight savings time' {
$responseContent.isDayLightSavingsTime | Should -Not -Be $true
}

It 'It should not be daylight savings time another way' {
$responseContent.isDayLightSavingsTime | Should -BeFalse
}
}

最佳答案

使用真实响应作为模拟输出的模板可能是最简单的。

Invoke-WebRequest -Method 'GET' -Uri 'http://worldclockapi.com/api/json/utc/now' | 
Export-Clixml .\response.xml

上述命令会将来自 API 的真实响应序列化到文件。

现在我们可以导入文件以与我们的模拟一起使用。只需使用 Mock 命令来定义我们的 mock。

模拟

  • -CommandName : 我们模拟的命令
  • -ParameterFilter:一个可选的过滤器,用于将模拟行为限制为仅使用 CommandName,其中传递给命令的参数值通过过滤器。此 ScriptBlock 必须返回一个 bool 值。
  • -MockWith:一个 ScriptBlock,指定将用于模拟 CommandName 的行为。默认是一个空的 ScriptBlock。我们在这里导入文件作为我们的输出。
Mock -CommandName Invoke-WebRequest -ParameterFilter { $Method -eq 'GET' } -MockWith { Import-Clixml .\response.xml }

现在,当使用 -Method 'Get' 调用 Invoke-WebRequest 时,我们的 mock 将被调用,并将返回我们使用 Import- 导入的对象CliXml(或其他方法 - json、xml 等。
注意:模拟命令必须在对我们正在模拟的命令的任何调用之前出现。另请注意,即使在内部也会调用模拟使用该命令的其他函数。

    BeforeAll {
Mock -CommandName Invoke-WebRequest -ParameterFilter { $Method -eq 'GET' } -MockWith { Import-Clixml .\response.xml }

# on this next line our mock will be called instead and will return our prepared object
$response = Invoke-WebRequest -Method 'GET' -Uri 'http://worldclockapi.com/api/json/utc/now'
$responseContent = $response.Content | ConvertFrom-Json
Write-Output $responseContent
}

关于PowerShell 纠缠模拟 Rest API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68523189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com