[英]Using postman.setNextRequest() to populate request body before Send
[英]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.