【问题标题】:Save a specific variable from a postman array从邮递员数组中保存特定变量
【发布时间】:2019-12-22 04:01:17
【问题描述】:

我有一个邮递员 json 响应,并且在数组中特定变量的位置发生了变化。根据我在下面的回复,我需要编写一个测试来循环第一次看到 optionLabel 值为“2 Pax Min”的响应。 将其“id”,即 BBBB 保存在环境变量中

我试过了

var jsonData = JSON.parse(responseBody);
jsonData[[0].optionSet.options].forEach(function(arroption) { 
if (arroption.optionLabel === '2 Pax Min') {
    pm.environment.set("pax", JSON.stringify(arroption.id));   
}
});

我的回应

[
    {
        "id": "",
        "date": "2019-08-21",
        "optionSet": {
            "optionSetLabel": "Options",
            "options": [
                {
                    "id": "A",
                    "optionLabel": "QUAD Rm"
                },
                {
                    "id": "AA",
                    "optionLabel": "QUAD Rm with post Accom"
                },
                {
                    "id": "AAA",
                    "optionLabel": "Rm 3 Pax Min"
                },
                {
                    "id": "AAAA",
                    "optionLabel": "4 Pax Min"
                }
            ]
        }
    },
    {
        "id": "",
        "date": "2019-08-22",
        "optionSet": {
            "optionSetLabel": "Options",
            "options": [
                {
                    "id": "B",
                    "optionLabel": "QUAD Rm"
                },
                {
                    "id": "BB",
                    "optionLabel": "QUAD Rm with post Accom"
                },
                {
                    "id": "BBB",
                    "optionLabel": "SGL Rm with post Accom"
                },
                {
                    "id": "BBBB",
                    "optionLabel": "2 Pax Min"
                }
            ]
        }
    }
]

我的最终结果是我想在环境变量中保存 id "BBBB"

【问题讨论】:

  • 可以使用 javascript

标签: javascript arrays postman


【解决方案1】:

Mickael 的答案应该是公认的解决方案(我赞成),但我只是想提供与 Postman 内置的 Lodash 相同的功能。

_.each(pm.response.json(), (data) => {
    _.each(data.optionSet.options, (option) => {
        if (option.optionLabel === '2 Pax Min') {
            pm.environment.set("pax", option.id);
        }
    })
})

我看到很多答案都使用var jsonData = JSON.parse(responseBody); 来解析响应正文,但这与使用更新的pm.* API 函数pm.response.json() 来做同样的事情是一样的。

https://learning.getpostman.com/docs/postman/scripts/postman_sandbox_api_reference/

【讨论】:

  • 感谢@Danny Dainton。你的解决方案奏效了。感谢您提供有关仅使用 pm 而不是我一直在做的事情的信息。可能必须修复我所有的测试。唯一与第一个解决方案相同的问题是它选择了与案例匹配的最后一个 id 而不是第一个。
【解决方案2】:

您在jsonData[[0].optionSet.options] 遇到了问题。

也许你想做jsonData[0].optionSet.optionsjsonData[1].optionSet.options之类的事情

这里的代码应该做你想做的事

for (let data of jsonData) {
  for (let option of data.optionSet.options) {
    if (option.optionLabel === '2 Pax Min') {
      pm.environment.set("pax", JSON.stringify(option.id));
    }
  }
}

forEach 相同,而不是for 循环

jsonData.forEach(function(data) {
  data.optionSet.options.forEach(function(arroption) {
    if (arroption.optionLabel === '2 Pax Min') {
      pm.environment.set("pax", JSON.stringify(arroption.id));
    }
  })
})

【讨论】:

  • 感谢@Mickael B。第二种解决方案对我来说效果更好。唯一的问题是它选择了与案例匹配的最后一个 id 而不是第一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 2017-03-25
  • 1970-01-01
  • 2023-03-27
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多