使用上一步

时间:2018-06-14 11:23:33

标签: postman postman-collection-runner

我正在使用邮递员处理一些测试脚本和数据清理脚本,并且想知道是否可以对上一步中生成的数组结果运行请求。

例如,我有一个API,它将任务作为JSON返回,如下所示:

[
    {
        "active": true,
        "_id": "5b2101244651a04a4907b094",
        "name": "Test Task",
        "updatedAt": "2018-06-13T11:33:56.911Z",
        "createdAt": "2018-06-13T11:33:56.911Z"
    },
    {
        "active": true,
        "_id": "5b2101244651a04a4907b067",
        "name": "Test Task 2",
        "updatedAt": "2018-06-13T11:33:56.911Z",
        "createdAt": "2018-06-13T11:33:56.911Z"
    }
]

所以在Tests脚本中我运行它来收集ID的数组:

var jsonData = JSON.parse(responseBody)
postman.setEnvironmentVariable('task_id_list', jsonData.map((i) => i._id))

下一个请求是删除任务,但API一次只删除一个任务。我正在尝试做类似的事情:

http://localhost:3000/api/v1/tasks/{{task_id_list}}

我希望Postman会看到task_id_list是一个数组和简单的“工作”,但事实似乎并非如此。是否可以根据数组输入多次执行步骤?

1 个答案:

答案 0 :(得分:2)

article

的解决方案

在第一个请求的测试脚本中获取ID数组(我更喜欢将其存储在JSON中以避免错误):

let JsonData = pm.response.json();
let iDs = JsonData.map((i) => i._id)));
pm.environment.set("IdArray", JSON.stringify(iDs);
//and now check, if there was no objects returned, stop runner
if(iDs.length === 0)
{
    postman.setNextRequest(null);//next request will not be sent
}
else
{
    pm.environment.set("count", 0);
}

在2请求的预请求脚本中:

var count = +pm.environment.get("count");
var iDs = JSON.parse(pm.environment.get("IdArray"));
pm.variables.set("task_id_list", iDs[count]); //like one-request environment variable
count = count + 1; //next iteration
if(count < iDs.length)
{
    postman.setNextRequest("NAME OF THIS REQUEST");
}
else 
{
    postman.setNextRequest(null); // or next request name
} 
pm.environment.set("count", count)

所以你应该理解我的想法。