使用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}}
取代。
我该怎么办?这个电话的正确语法是什么?
答案 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}}
一样)。