邮递员:如何评估json数组

时间:2016-03-15 08:21:53

标签: javascript json postman

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

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

RealMatrix sampleMatrix = MatrixUtils.createRealMatrix(2, 2);
sampleMatrix.setEntry(0, 0, 1);
sampleMatrix.setEntry(0, 1, 2);
sampleMatrix.setEntry(1, 0, 3);
sampleMatrix.setEntry(1, 1, 4);
System.out.println(sampleMatrix);

我添加了一个测试

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

现在我使用URL

向web服务发送连续请求
postman.setGlobalVariable("user_0_id", JSON.parse(responseBody)[0].id);

邮差评估http://example.com/users/{{user_0_id}} {{user_0_id}}

这很好用。但现在我加入了我的第一次电话测试

11111111-1111-1111-1111-111111111111

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

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

但现在http://example.com/users/{{users[0].id}} 无法评估,它保持不变,不会被{{users[0].id}}取代。

我该怎么办?这个电话的正确语法是什么?

1 个答案:

答案 0 :(得分:6)

要在全局/环境变量中保存数组,您必须使用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}}一样)。