powershell 如何每分钟循环一次,直到API响应条件为真?

ctehm74n  于 2023-01-20  发布在  Shell
关注(0)|答案(2)|浏览(130)

我最近才开始写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循环或其他循环,通过每分钟调用第二个api来检查测试状态,以获得响应中的状态"DONE"。然后启动第三个调用,因为如果测试没有完成,我就无法生成报告。
    • 示例:**
foreach(var minute in minutes)
{

    // if(status.Done)
    // {
    //   CALL GenerateReport
    // }
    // else
    //{
        //keep checking every minute 
    //}
}
h79rfbju

h79rfbju1#

你可以使用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
y3bcpkx1

y3bcpkx12#

开始休眠秒数60
将暂停执行1分钟
MS link to cmdlet

相关问题