为了账号安全,请及时绑定邮箱和手机立即绑定

Postman API - setNextRequest 未设置下一个请求

Postman API - setNextRequest 未设置下一个请求

holdtom 2022-01-07 13:21:24
我有一个获取工作状态的 API。它解析响应正文并查找作业的“状态:”。如果它是 INPROGRESS 我告诉请求等待 10 秒并重新运行,但这不会发生,它只是继续下一个。这是我正在运行的测试:pm.environment.unset("JobStatus");var jsonData = pm.response.json();pm.environment.set("JobStatus", jsonData['progress-update'].state);const sleep = (milliseconds) => {  return new Promise(resolve => setTimeout(resolve, milliseconds));};pm.environment.get("JobStatus");if (    environment.JobStatus == "DONE") {  postman.setNextRequest("Export Results");}else if (    environment.JobStatus == "INPROGRESS"){  sleep(10000).then(() => {  postman.setNextRequest("Get Job Status");})}else {  postman.setNextRequest(null);}数据有一个我正在检查的主任务,然后是许多具有相同状态 INPROGRESS 字符串的子任务。{    "progress-update": {        "@type": "parallel-progress",        "job": {            "@href": "/api/space/job-management/jobs/4755716"        },        "taskId": 4755716,        "jobName": "Compare Config-4755716",        "state": "INPROGRESS",        "status": "UNDETERMINED",        "percentage": 10,        "subTask": [            {                "@type": "percentage-complete",                "state": "INPROGRESS",                "status": "UNDETERMINED",                "percentage": 0            },变量设置正确,但没有遵循我的 else if 语句。
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您尝试做的最好是使用集合运行器和setNextRequest. 我花了好几个小时试图以同样的方式完成同样的事情,但一无所获。这是你最好的选择:

https://learning.getpostman.com/docs/postman/scripts/branching-and-looping/

不幸的是,这仅适用于集合运行器,但其想法是在一个请求中您执行所有if语句并根据您将setNextRequest("same_request")setNextRequest(null)


查看完整回答
反对 回复 2022-01-07
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

对于那些可能遇到这种情况的人,我发现了这个问题,或者说是两个问题。


我的 environment.JobStatus 变量没有被设置,我不知道如何让它这样做。所以我废弃了环境变量,只是在 JS 中声明了它。


其次,我的 postman.setNextRequest("Get Job Status") 被忽略了,因为它嵌套在 sleep 函数中。不知道为什么会导致它,但我把它从睡眠中掉了出来,现在它循环得很好。


var jsonData = pm.response.json();

var jobState = jsonData['progress-update'].state


const sleep = (milliseconds) => {

  return new Promise(resolve => setTimeout(resolve, milliseconds));

};



if (    jobState === "DONE") 

{

  console.log(jobState);

}

else if (    jobState === "INPROGRESS")

{

  sleep(10000).then(() => {

  console.log(jobState);

})

    postman.setNextRequest("Get Job Status");

}

else {

  console.log("ELSE Clause was matched.");

  console.log(jobState);

  postman.setNextRequest(null);

}


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 362 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信