【问题标题】:Postman: how to evaluate json arrays邮递员:如何评估 json 数组
【发布时间】:2016-06-30 13:43:12
【问题描述】:

使用 Postman,可以将响应正文中的特殊字段保存到变量中,并在连续调用中使用该变量的值。

例如: 在我第一次调用网络服务时,响应正文中返回以下内容

[ {
  "id" : "11111111-1111-1111-1111-111111111111",
  "username" : "user-1@example.com",
}, {
  "id" : "22222222-2222-2222-2222-222222222222",
  "username" : "user-2@example.com"
} ]

我添加了一个测试

postman.setGlobalVariable("user_0_id", JSON.parse(responseBody)[0].id);

现在我使用 URL 向 Web 服务发送连续请求

http://example.com/users/{{user_0_id}}

Postman 将 {{user_0_id}} 评估为 11111111-1111-1111-1111-111111111111

这很好用。但是现在我添加到我的第一次通话的测试中

postman.setGlobalVariable("users", JSON.parse(responseBody));

在我对网络服务的第二个请求中,我调用了 URL

http://example.com/users/{{users[0].id}}

但现在{{users[0].id}} 无法评估,它保持不变,不会被11111111-1111-1111-1111-111111111111 替换。

我能做什么?调用的正确语法是什么?

【问题讨论】:

标签: javascript json postman


【解决方案1】:

要将数组保存在全局/环境变量中,您必须对其进行 JSON.stringify()。这是Postman documentation about environments的摘录:

环境和全局变量将始终存储为字符串。如果您要存储对象/数组,请务必在存储之前对其进行 JSON.stringify(),并在检索时对其进行 JSON.parse()。

如果确实有必要保存整个响应,请在第一次调用的测试中执行以下操作:

var jsonData = JSON.parse(responseBody);
// test jsonData here

postman.setGlobalVariable("users", JSON.stringify(jsonData));

要从全局变量中检索用户 ID 并在请求 URL 中使用它,您必须在第二次调用的预请求脚本中解析全局变量并将值添加到“临时变量”以在 URL 中使用它:

postman.setGlobalVariable("temp", JSON.parse(postman.getEnvironmentVariable("users"))[0].id);

因此,第二个调用的 URL 将是:

http://example.com/users/{{temp}}

在第二次调用的测试中,确保最后清除临时变量:

postman.clearGlobalVariable("temp");

这应该可以为您解决问题。据我所知,目前无法直接在 URL 中解析全局变量以访问特定条目(就像您尝试使用 {{users[0].id}} 一样)。

【讨论】:

  • 似乎语法已经改变,现在设置你应该使用的全局变量:pm.global.set 而不是postman.setGlobalVariable
猜你喜欢
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 2010-11-10
  • 2020-10-12
  • 2021-05-03
相关资源
最近更新 更多