使用Postman获取下一次迭代

r3i60tvu  于 12个月前  发布在  Postman
关注(0)|答案(2)|浏览(173)

我正在使用Postman从Web服务中获取结果。
Web服务将结果分成50个块,下一个请求URL在前一个JSON返回中如下所示:

{
    "type": "user.list",
    "pages": {
        "type": "pages",
        "next": "https://api.webservice.io/users?per_page=50&page=2",
        "page": 1,
        "per_page": 50,
        "total_pages": 2721
    },
...

字符串
有没有一种方法可以自动请求下一页,直到我有所有的结果?

z3yyvxxp

z3yyvxxp1#

是的
您可以剖析回应中的next,并将postman.setNextRequest('<next url>')旁的值设定为。
例如,在测试部分添加以下代码

try {
  var userList = JSON.parse(responseBody);

  // Do whatever you have to do with the response 
  // Check if userList.pages.next is valid string 
  // If valid do

  postman.setNextRequest(userList.pages.next);

} catch (e) {
  console.log('Error parsing JSON', e);
  postman.setNextRequest(null);
}

字符串
参考-Conditional Workflows in Postman

x8goxv8g

x8goxv8g2#

我知道这是一个老帖子,但我想分享一个答案给其他可能正在挣扎的Postman用户。这个答案还包括在响应中不提供“下一个URL”的API中循环的方法。
你可以做的第一件事是在你最初的API调用中使用一个变量作为页码。在你提供的JSON响应中,“下一个”URL如下所示:

https://api.webservice.io/users?per_page=50&page=2

字符串
如果你使用这个作为你的原始URL,那么你可以简单地用一个变量替换硬页码,像这样:

https://api.webservice.io/users?per_page=50&page={{pageNumber}}


为了在您的第一个页面上成功运行此操作,请使用Pre-Request分页选项卡定义您的初始pageNumber:

if (!pm.variables.get("pageNumber")) {
    pageNumber = 1;
    pm.variables.set("pageNumber", pageNumber);
}


注意事项:确保你为你的变量定义了正确的作用域。这里我使用了“pm.variables.set”,它是局部的。你也可以根据你的需要使用“collection”,“environment”或“global”变量。
接下来,在Tests选项卡中,您可以添加一行代码到下一个页面,然后再次调用API。您需要添加一个条件,以确保您不会永远迭代。
根据你的需要,一个很好的条件是页码。由于responseBody显示了“total_pages”,你可以将其与当前pageNumber进行比较。

const jsonData = JSON.parse(responseBody);
const totalPages = jsonData.pages.total_pages;
let pageNumber = pm.variables.get("pageNumber");

if (pageNumber < totalPages) {
    pageNumber++; //this increments the variable by 1;
    pm.variables.set("pageNumber", pageNumber);
    postman.setNextRequest("https://api.webservice.io/users?per_page={{perPageCount}}&page={{pageNumber}}");
}


你可以尝试的另一件事是增加“每页”计数,以增加每次API调用的结果数量。我已经能够将“每页”计数从50增加到1,000(一千)。这节省了大量的时间进行多次调用,但你必须测试和确认你可以成功检索的最高数字,为你提供你想要的数据:

https://api.webservice.io/users?per_page={{perPageCount}}&page={{pageNumber}}


您不需要重新定义{{perPageCount}}变量。您只需要定义一次。如果您知道最大有用页数,您可以简单地将其硬编码为:

https://api.webservice.io/users?per_page=1000&page={{pageNumber}}


您也可以使用Pre-Request Script设置变量:

const perPageCount = 1000;
pm.variables.set("perPageCount", perPageCount);

https://api.webservice.io/users?per_page={{perPageCount}}&page={{pageNumber}}

把这一切放在一起

如果我正在构建一个Postman集合来多次循环这个API调用,我将这样构建它:
预请求脚本:

if (!pm.variables.get("pageNumber")) {
    pageNumber = 1;
    pm.variables.set("pageNumber", pageNumber);
}

const perPageCount = 1000;
pm.variables.set("perPageCount", perPageCount);


网址:

https://api.webservice.io/users?per_page={{perPageCount}}&page={{pageNumber}}


测试:

const jsonData = JSON.parse(responseBody);
const totalPages = jsonData.pages.total_pages;
let pageNumber = pm.variables.get("pageNumber");

if (pageNumber < totalPages) {
    pageNumber++; //this increments the variable by 1;
    pm.variables.set("pageNumber", pageNumber);
    postman.setNextRequest("https://api.webservice.io/users?per_page={{perPageCount}}&page={{pageNumber}}");
}


最后,为了使其工作,您必须运行Postman Collection Runner。您不能简单地单独调用API。您可以在Postman教程中找到有关how to use the Collection Runner的详细信息。

相关问题