簡體   English   中英

Postman API - setNextRequest 未設置下一個請求

[英]Postman API - setNextRequest not setting next request

我有一個獲取工作狀態的 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);
}

數據有一個我正在檢查的主要任務,然后是許多具有相同 state 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 語句。

在此處輸入圖像描述

編輯:

我更改了邏輯以在請求 4 的測試中設置變量並檢查腳本前請求 5。這應該將收集運行器發送回請求 4,直到 JobStatus == "DONE" 但事實並非如此。

我添加了一些額外的代碼來幫助我從控制台查看它的執行情況:

    const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds));
};

pm.environment.get("JobStatus");

if (    environment.JobStatus === "DONE") 
{
  postman.setNextRequest("Export Results");
  console.log("DONE")
  console.log(environment.JobStatus)
}
else if (    environment.JobStatus === "INPROGRESS")
{
  sleep(10000).then(() => {
  postman.setNextRequest("Get Job Status");
  console.log("INPROGRESS")
  console.log(environment.JobStatus)
})}
else {
  postman.setNextRequest(null);
  console.log("ELSE")
  console.log(environment.JobStatus)
}

當執行此操作時,我得到

INPROGRESS

INPROGRESS

在控制台中打印。 它只是完成了請求,而沒有將自己發送回請求 4 重試。

為什么要遵循 else if 邏輯但忽略 setNextRequest?

您要做的最好是使用 collection runner 和setNextRequest來完成。 我花了好幾個小時試圖以同樣的方式完成同樣的事情,但一無所獲。 這是你最好的選擇:

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

不幸的是,這僅在集合運行器中有效,但想法是在單個請求中您執行所有if語句並根據您將setNextRequest("same_request")setNextRequest(null)的邏輯

對於那些可能遇到這種情況的人,我發現了這個問題,或者說是兩個問題。

我的 environment.JobStatus 變量沒有被設置,我不知道如何讓它這樣做。 所以我廢棄了環境變量,只是在 JS 中聲明了它。

其次,我的 postman.setNextRequest("Get Job Status") 被忽略,因為它嵌套在睡眠 function 中。 不知道為什么會導致它,但我把它從睡眠中掉了出來,現在它循環得很好。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM