{
"users": [...],
"next_page": "https://junk.example.com/api/v2/users.json?page=2",
"previous_page": null,
"count": 1091
}
上面的示例是我在响应正文中收到的。我正在尝试使邮递员自动拉动每个页面。我已经在邮递员中看到了有关条件工作流的文档,但是我似乎无法使其正常工作。我使用了this post made last year.中的示例示例,但是该示例似乎与我的情况不太吻合。请参见下面的尝试的测试代码。
try {
var jsonData = pm.response.json();
//var jsonData = JSON.parse(responseBody);
//The above commented code is my attempt to alter the original example
//in the hopes of a solution.
postman.setNextRequest(jsonData.next_page);
} catch (e) {
console.log('Error parsing JSON', e);
postman.setNextRequest(null);
}
您可能已经看到尝试修改它,以查看采用另一种提取next_page对象的方法是否可以解决问题,但到目前为止还算不上成功。我没有收到任何错误,当我尝试执行收集运行时,get请求根本不会运行下一页。
答案 0 :(得分:1)
问题在于postman.setNextRequest()的工作原理略有不同:在执行收集运行器期间,它根据集合中的请求名称设置下一个请求。在这种情况下,您将提供要遵循的实际URL,而不是在集合中提供下一个请求的名称。
发送此类请求的最简单方法是在您的集合中添加新请求(可以将其命名为'NextRequest'
,并提供环境变量{{nextRequestUrl}}
作为URL。
在您的第一个请求中,您可以执行以下代码将下一页的实际URL添加到环境变量中
const jsonData = pm.response.json();
if(jsonData.next_page != null){
pm.environment.set('nextRequestUrl', jsonData.next_page)
postman.setNextRequest('NextRequest');
} else {
postman.setNextRequest(null);
}
在'NextRequest'
请求中,您可以在“测试”标签上添加相同的脚本。
答案 1 :(得分:1)
您可以在“预请求脚本”或“测试”选项卡上使用pm.sendRequest。在下面的示例中,我将“测试”选项卡放入。使用“显示邮递员控制台”查看结果:
# Recursive function that will call all of the pages
function callMyRequest(nextUrl) {
pm.sendRequest({
url: nextUrl,
method: 'GET'
}, function (err, res) {
if (err) {
console.log(err)
} else {
# Basic tests about the response (res)
pm.test("Response code is 200", function() {
pm.expect(res).to.have.property('code', 200);
});
pm.test("Response status is OK", function() {
pm.expect(res).to.have.property('status', 'OK');
});
pm.test("Response Body is not empty", function () {
pm.expect(res.json()).to.not.be.empty;
});
# Check for the next page
if (res.json().next_page !== null) {
callMyRequest(res.json().next_page);
} else {
# Stop iterations
postman.setNextRequest(null);
}
}
});
}
# Basic tests about the main response (pm.response)
pm.test("Response code is 200", function() {
pm.expect(pm.response).to.have.property('code', 200);
});
pm.test("Response status is OK", function() {
pm.expect(pm.response).to.have.property('status', 'OK');
});
pm.test("Response Body is not empty", function () {
pm.expect(pm.response.json()).to.not.be.empty;
});
# We need to check if there is pagination
if (pm.response.json().next_page !== null) {
callMyRequest(pm.response.json().next_page);
} else {
postman.setNextRequest(null);
}