POSTMAN - 从 JSON 响应中保存属性值

Dan*_*her 3 json postman

我是 JSON 和 Postman 的新手(截至昨天)。

我正在尝试做一些非常简单的事情,我创建了一个 GET 请求,该请求在 JSON 响应中拉入表单列表。我想接受这个响应并获取第一个“id”标记并将其放入一个变量中。

我正在使用全局变量,但希望尽可能使用集合变量。无论哪种方式,这里都是我正在做的。

我尝试了几件事,最近一次是:

var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id", jsonData.args.id);
Run Code Online (Sandbox Code Playgroud)

还有这个:

pm.test("GetId", function () {
    var jsonData = pm.response.json();
    pm.globals.set("id", jsonData.id);    
});
Run Code Online (Sandbox Code Playgroud)

响应代码如下所示:

{
   "forms":[
      {
         "id":"3197239",
         "created":"2018-09-18 11:37:39",
         "db":"1",
         "deleted":"0",
         "folder":"151801",
         "language":"en",
         "name":"Contact Us",
         "num_columns":"2",
         "submissions":"0",
         "submissions_unread":"0",
         "updated":"2018-09-18 12:02:13",
         "viewkey":"xxxxxx",
         "views":"1",
         "submissions_today":0,
         "url":"https://xxx",
         "data_url":"",
         "summary_url":"",
         "rss_url":"",
         "encrypted":false,
         "thumbnail_url":null,
         "submit_button_title":"Submit Form",
         "inactive":false,
         "timezone":"US/Eastern",
         "permissions":150
      },
      {
         "id":"3197245",
         "created":"2018-09-18 11:42:02",
         "db":"1",
         "deleted":"0",
         "folder":"151801",
         "language":"en",
         "name":"Football Draft",
         "num_columns":"1",
         "submissions":"0",
         "submissions_unread":"0",
         "updated":"2018-09-18 12:11:54",
         "viewkey":"xxxxxx",
         "views":"1",
         "submissions_today":0,
         "url":"https://xxxxxxxxx",
         "data_url":"",
         "summary_url":"",
         "rss_url":"",
         "encrypted":false,
         "thumbnail_url":null,
         "submit_button_title":"Submit Form",
         "inactive":false,
         "timezone":"US/Eastern",
         "permissions":150
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ton 5

这将得到第一个id

pm.globals.set('firstId', _.first(pm.response.json().forms).id)
Run Code Online (Sandbox Code Playgroud)

每次都会得到数组中的第一个,因此它会设置一个不同的变量,因为响应发生了变化。


test您创建的几乎没有,但需要参考下井的水平到forms数组:

pm.test("GetId", function () {
    var jsonData = pm.response.json()
    pm.expect(jsonData.forms[0].id).to.equal("3197239")
    pm.globals.set("id", jsonData.forms[0].id)   
})
Run Code Online (Sandbox Code Playgroud)

[0]被引用在该阵列中的第一对象的第一ID。例如[1]会得到第二个等等。


您目前无法使用pm.*API设置集合级别变量- 这些只能手动添加并使用pm.variables.get('var_name')语法引用。

编辑:

在新版本的桌面应用程序中,您可以使用pm.collectionVariables.set().

  • “pm.collectionVariables.set”现在可用于设置集合变量。另外,@DanaFisher 你应该接受丹尼的回答,这样他就会因此获得荣誉。 (2认同)