尝试在工作区中获取两个postman.setNextRequest(未链接)或两个Action

时间:2019-07-14 00:48:45

标签: postman postman-collection-runner postman-pre-request-script postman-testcase postman-native-app

我对邮递员(和编码人员)很陌生,并试图查找并整理许多脚本片段,以使其按我想要的方式工作。 我想要的非常简单:我有一个ID列表,每个ID都想在其中进行POST,获取其中一个responseBody作为变量,然后执行另一个POST。我想我已经接近了,但是我无法使其正常工作。

我尝试过: 同一集合中的两个POST请求并运行该集合。 在第一个请求中,我有一个POST

https://APIADDRESS/?order_id {{orderid}}&contract [copy_order_data] = true

在“预请求脚本”选项卡上:

var orderids = pm.environment.get(“orderids”);

if (!orderids) {
orderids = [“bc46bf79-2846-44ed-ac4d-78c77c92ccc8”,“81aacc33-1ade-41a3-b23e-06b03b526b8f”];
}

var currentOrderId = orderids.shift();
pm.environment.set(“orderid”, currentOrderId);
pm.environment.set(“orderids”, orderids);

在“测试”标签上:

var orderids = pm.environment.get(“orderids”);

if (orderids && orderids.length > 0) {
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable(“invoice.id”, jsonData.invoice.id);
postman.setNextRequest(“Create invoice”);
} else {
postman.setNextRequest(null);

}

invoice.id是一个环境变量,其中填充了第一个操作/帖子的响应正文,然后使用第二个操作/帖子的响应正文。

然后第二个请求将是POST到

https://APIADDRESS/invoices/ {{invoice.id}} / finalize.json

这当然是行不通的。它要么不运行集合中的第二个请求,要么不循环到列表中的多个ID。

因此,我认为将第二个POST放在第一个POST中即可解决。但是我没有运气。

可以请人帮我吗?

2 个答案:

答案 0 :(得分:0)

我已经尝试过用POSTMAN提供的示例API提到用例。 你可以尝试吗?

第一个POST方法请求https://postman-echo.com/post

第一种POST方法的预请求脚本

var orderids  = pm.environment.get("orderids");

if(!orderids ){
    orderids = ["bc46bf79-2846-44ed-ac4d-78c77c92ccc8","81aacc33-1ade-41a3-b23e-06b03b526b8f"];
}

var currentOrderId = orderids.shift();
pm.environment.set("orderid", currentOrderId);
pm.environment.set("orderids", orderids);

第一个POST方法的“测试”标签

var orderids = pm.environment.get("orderids");
if (orderids && orderids.length > 0) {
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("invoice.id", jsonData.headers.host);
postman.setNextRequest("Test1");
} else {
postman.setNextRequest(null);
}

第二种POST方法要求https://postman-echo.com/post?key= {{invoice.id}}

执行上述收集后,它将在环境变量中设置orederids和invoice.id值,然后将调用下一个POST方法。

希望这会对您有所帮助。

答案 1 :(得分:0)

感谢@HalfBloodPrince,它来自邮递员回声,但是在我看来,它不是:S 我设法使它工作的是使用Json文件作为Orderids列表。 在这种情况下,我将所有请求分开。

请求1-https://APIADDRESS/?order_id {{orderid}}&contract [copy_order_data] = true

“测试”标签:

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("invoice.id", jsonData.invoice.id);

请求2-https://APIADDRESS/invoices/ {{invoice.id}} / finalize.json

这样,一切都井井有条。 谢谢