【发布时间】:2021-09-17 07:08:57
【问题描述】:
我有 3 个 API。
API#1 - GET {{endPoint}}/event/{{customerId}}/orders
API#2 - POST {{endPoint}}/pullOrders/{{orderId}}/claims
API#3 - DELETE {{endPoint}}/pullOrders/{{orderId}}/events
API#1 的响应是带有 orderID 的 json。
{
"List": [
{
"OrderId": "c6882585",
"Type": "pull"
},
{
"OrderId": "a2f818e7",
"Type": "pull"
},
{
"OrderId": "1f45e306",
"Type": "pull"
}
]
}
API#2 的输入是来自 API#1 响应的 orderId。 API#2 的响应是一个带有特定 customerId 的 partNumber 的 json。响应可能为空/null,partNumber 数量与其他 customerId 不同。
[
{
"EventId": "46323beaf738",
"PartNumber": "22b188f7",
},
{
"EventId": "5024519db933",
"PartNumber": "2c2d8757",
}
]
这些 partNumber 在其主体中输入到 API#3。
API#3 的主体
{
"partNumberList": [22b188f7, 2c2d8757]
}
目标是通过链接 API#1、API#2 和 API#3 删除客户的所有订单历史记录。
在 API#1 的测试中,我得到了测试中的所有 orderId,并将其保存在一个变量中。
const responseJson = pm.response.json();
var orderIdList = responseJson.List;
var orderIds = []
for(var index in orderIdList) {
orderIds.push(orderIdList[index].OrderId);
}
pm.variables.set("orderIds", JSON.stringify(orderIds));
pm.variables.set("orderIdsIndex", 0);
在 API#2 的预请求脚本中,我使用 API#1 中的 orderId 设置了对 API#2 的调用。
var orderIds = JSON.parse(pm.variables.get('orderIds'));
var index = parseInt(pm.variables.get('orderIdsIndex'));
pm.variables.set('orderId', orderIds[index]);
if (index + 1 < orderIds.length){
pm.variables.set('orderIdsIndex', index + 1);
postman.setNextRequest('API#2');
}else{
postman.setNextRequest(null);
}
到目前为止,一切都按预期工作,即 API#2 在循环中为 3 个 orderId 调用 3 次。
在 API#2 的测试中,我尝试了以下方法。当下面的partNumbers 数组不为空时,运行停止。它调用 API#3 然后停止。如何让它继续到下一次迭代?
const responseJson = pm.response.json();
var partNumbers = [];
for (var key in responseJson){
partNumbers.push(responseJson[key].PartNumber);
}
pm.variables.set('partNumbers', JSON.stringify(partNumbers));
if (receiptHandles.length != 0) {
postman.setNextRequest('API#3');
}else{
postman.setNextRequest('API#2');
}
在 API#3 的正文中,我有
{
"partNumberList": {{partNumbers}}
}
【问题讨论】:
-
为什么不能在调用第三个端点之前预先存储所有内容。为什么要回到 api2?
标签: postman postman-collection-runner postman-pre-request-script postman-testcase