我刚刚开始编写Powershell脚本。我有一个项目,我正在进行负载测试。我运行测试并根据测试结果生成报告。我正在使用的工具通过他们的API完成了这一切。所以我有3个Rest API,我正在使用Powershell脚本发送呼叫。
第一次调用:启动负载测试,但在配置中设置了多次迭代(可能会运行几个小时):
Invoke-RestMethod -Method Post -Uri $StartTestUrl -ContentType "application/json" -OutVariable StartTestResponse -Body $StartTestRequestBody | ConvertTo-Json
第二次调用:获取刚刚运行/或仍在运行的负载测试的状态:
Invoke-RestMethod -Method Post -Uri $GetStatusUrl -ContentType "application/json" -OutVariable GetStatusResponse -Body $GetStatusRequestBody | ConvertTo-Json
第3次调用:从完成的测试运行生成报告:
Invoke-RestMethod -Method Post -Uri $GenerateReportUrl -ContentType "application/json" -OutVariable GenerateReportResponse -Body $GenerateReportRequestBody | ConvertTo-Json
目标:我希望能够在Powershell中编写DO-WHILE循环或其他循环,通过每分钟调用第2个api来检查测试状态" DONE&# 34;在回应中。然后开始第3次调用,因为如果测试没有完成,我就无法生成报告。
示例:
foreach(var minute in minutes)
{
// if(status.Done)
// {
// CALL GenerateReport
// }
// else
//{
//keep checking every minute
//}
}
答案 0 :(得分:1)
您可以使用do-while循环执行此操作。在此示例中,假设$GetStatusResponse
只是$true
/ $false
值。实际上,您需要修改代码以检查实际的" DONE"消息。
#1
Invoke-RestMethod -Method Post -Uri $StartTestUrl -ContentType "application/json" -OutVariable StartTestResponse -Body $StartTestRequestBody | ConvertTo-Json
do{
# 2
Invoke-RestMethod -Method Post -Uri $GetStatusUrl -ContentType "application/json" -OutVariable GetStatusResponse -Body $GetStatusRequestBody | ConvertTo-Json
if($GetStatusResponse -eq $False){
Start-Sleep -Seconds 60
}
}while($GetStatusResponse -eq $False)
# 3
Invoke-RestMethod -Method Post -Uri $GenerateReportUrl -ContentType "application/json" -OutVariable GenerateReportResponse -Body $GenerateReportRequestBody | ConvertTo-Json
答案 1 :(得分:-1)