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

gopyfrb3  于 2024-01-07  发布在  Postman
关注(0)|答案(2)|浏览(280)

我有一个获取作业状态的API,它解析响应体并查找作业的“state:“。
如果它是INPROGRESS,我会告诉请求等待10秒并返回,但这并没有发生,它只是移动到下一个。
这是我正在运行的测试:

  1. pm.environment.unset("JobStatus");
  2. var jsonData = pm.response.json();
  3. pm.environment.set("JobStatus", jsonData['progress-update'].state);
  4. const sleep = (milliseconds) => {
  5. return new Promise(resolve => setTimeout(resolve, milliseconds));
  6. };
  7. pm.environment.get("JobStatus");
  8. if ( environment.JobStatus == "DONE")
  9. {
  10. postman.setNextRequest("Export Results");
  11. }
  12. else if ( environment.JobStatus == "INPROGRESS")
  13. {
  14. sleep(10000).then(() => {
  15. postman.setNextRequest("Get Job Status");
  16. })}
  17. else {
  18. postman.setNextRequest(null);
  19. }

字符串
该数据有一个我正在检查的主任务,然后有许多具有相同状态INPROGRESS字符串的子任务。

  1. {
  2. "progress-update": {
  3. "@type": "parallel-progress",
  4. "job": {
  5. "@href": "/api/space/job-management/jobs/4755716"
  6. },
  7. "taskId": 4755716,
  8. "jobName": "Compare Config-4755716",
  9. "state": "INPROGRESS",
  10. "status": "UNDETERMINED",
  11. "percentage": 10,
  12. "subTask": [
  13. {
  14. "@type": "percentage-complete",
  15. "state": "INPROGRESS",
  16. "status": "UNDETERMINED",
  17. "percentage": 0
  18. },


变量设置正确,但else if语句没有被执行。


的数据
编辑:
我改变了逻辑,在请求4的测试中设置变量,并在预脚本请求5上进行检查。这应该会将收集运行器发送回请求4,直到JobStatus ==“DONE”,但事实并非如此。
我添加了一些额外的代码来帮助我从控制台查看它的执行情况:

  1. const sleep = (milliseconds) => {
  2. return new Promise(resolve => setTimeout(resolve, milliseconds));
  3. };
  4. pm.environment.get("JobStatus");
  5. if ( environment.JobStatus === "DONE")
  6. {
  7. postman.setNextRequest("Export Results");
  8. console.log("DONE")
  9. console.log(environment.JobStatus)
  10. }
  11. else if ( environment.JobStatus === "INPROGRESS")
  12. {
  13. sleep(10000).then(() => {
  14. postman.setNextRequest("Get Job Status");
  15. console.log("INPROGRESS")
  16. console.log(environment.JobStatus)
  17. })}
  18. else {
  19. postman.setNextRequest(null);
  20. console.log("ELSE")
  21. console.log(environment.JobStatus)
  22. }


当这个被执行时,
INPROGRESS
INPROGRESS
在控制台中打印。它只是完成请求,而不会将自己发送回请求4重试。
为什么else if逻辑被遵循,而setNextRequest被忽略?

55ooxyrt

55ooxyrt1#

你要做的事情最好使用collection runner和setNextRequest来完成。我花了几个小时试图用同样的方法完成你要做的事情,但毫无进展。这是你最好的选择:
https://learning.getpostman.com/docs/postman/scripts/branching-and-looping/
不幸的是,这只在collection runner中有效,但其思想是,在单个请求中执行所有if语句,并根据逻辑执行setNextRequest("same_request")setNextRequest(null)

r6l8ljro

r6l8ljro2#

对于那些可能遇到这个问题的人,我发现了这个问题,或者更确切地说是两个问题。
我的environment.JobStatus变量没有被设置,我不知道如何让它这样做。所以我放弃了环境变量,只是在JS中声明它。
其次,我的postman.setNextRequest(“Get Job Status”)被忽略了,因为它被嵌套在sleep函数中。不知道为什么会这样,但我把它从sleep中删除了,现在它循环得很好。

  1. var jsonData = pm.response.json();
  2. var jobState = jsonData['progress-update'].state
  3. const sleep = (milliseconds) => {
  4. return new Promise(resolve => setTimeout(resolve, milliseconds));
  5. };
  6. if ( jobState === "DONE")
  7. {
  8. console.log(jobState);
  9. }
  10. else if ( jobState === "INPROGRESS")
  11. {
  12. sleep(10000).then(() => {
  13. console.log(jobState);
  14. })
  15. postman.setNextRequest("Get Job Status");
  16. }
  17. else {
  18. console.log("ELSE Clause was matched.");
  19. console.log(jobState);
  20. postman.setNextRequest(null);
  21. }

字符串

展开查看全部

相关问题