【问题标题】:How to Iterate through each JSON key-value pair in Postman如何遍历 Postman 中的每个 JSON 键值对
【发布时间】:2020-03-21 10:07:13
【问题描述】:

我正在通过发送以下格式的 JSON 正文数据在 POSTMAN 中针对 POST API 请求编写测试:

"data": {

      "name": "Amber Joseph",
      "dob": "1988-10-13",
      "addressLine1": "Ap #770-9459 Quis Av.",
      "state": "WA",
      "suburb": "Beverley",
      "yesNo": false,
      "balance": 423.00,
      "club": [
        "Dance",
        "Sports"
      ],
      "activities" : null
      "libraryCard": {
        "uid": "2d07d77c-8756-43d4-912f-238a2ff567fe"
      }
}

我收到了类似格式的请求响应,并添加了一些详细信息:

{
  "status": "Success",
  "message": "Created new 'Student' record",
  "correlationCode": "Z848640-261354",
  "type": {
    "id": 51247,
    "name": "Student",
    "slug": "student",
    "application": {
      "name": "Willow University"
    }
  },
  "data": {
    "name": "Amber Joseph",
    "dob": "1988-10-13",
    "addressLine1": "Ap #770-9459 Quis Av.",
    "state": "WA",
    "suburb": "Beverley",
    "yesNo": false,
    "balance": 423.00,
    "club": [
      "Dance",
      "Sports"
    ],
    "libraryCard": {
      "uid": "2d07d77c-8756-43d4-912f-238a2ff567fe",
      "name": "11206"
    }
}

现在我想在这里实现两件事: 1.验证响应正文中的每个键不具有空值。请注意,我正在发送一个值为 null 的键,并且它不会作为响应返回。 2. 每个key在request body中发送的value是response body中同一个key返回的value。例如,如果“name”键的值为“Amber Joseph”,则响应键“name”也返回“Amber Joseph”。但我想为每个键做这件事。键也可以每次都延迟,例如我可能会或可能不会使用“名称”键发送它,因此我需要一个适用于我发送的任何键值对的通用解决方案。

我可以通过以下方式循环:

let jsonData = pm.response.json();
let dKey = Object.keys(jsonData);
let dValue = Object.values(jsonData);
for(var i = 0; i < dV.length; i++ ){
        pm.expect(dV[i]).to.not.eql(null);
    } 

但这不会单独检查嵌套的键值对。我特别想检查“数据”对象中的每个键值对。任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: javascript json postman postman-testcase


    【解决方案1】:

    您可以像这样从请求中获取 JSON 数据:

    const requestJson = JSON.parse(pm.request.body.raw);
    

    (假设您在 Postman 中使用的是 RAW 正文。)

    然后,您可以将响应的 data 字段与原始请求的 data 字段进行比较:

    const requestJson = JSON.parse(pm.request.body.raw);
    const responseJson = pm.response.json();
    
    for (const [reqKey, reqValue] of Object.entries(requestJson.data)) {
        pm.expect(responseJson.data[reqKey]).to.eql(requestJson.data[reqKey]);
    }
    

    从那里,您可以在响应的其余部分添加您想要执行的任何检查。

    【讨论】:

    • 我不太明白 responseJson.data[reqKey] 是什么?..我试图记录它的值,但似乎一无所获。此外,我觉得它并没有完全从请求正文中获取所有键值对并根据响应键检查它们。你能详细说明你的答案吗?
    • @MuznaZafar 请试试console.log(pm.request.body.raw),然后告诉我它显示的内容。
    • 这是显示的内容:code {↵ "data": {↵ ↵ "name": "Amber Joseph",↵ "dob": "1988-10-13",↵ " addressLine1": "Ap #770-9459 Quis Av.",↵ "state": "WA",↵ "suburb": "Beverley",↵ "yesNo": false,↵ "balance": 423.00,↵ "club" : [↵ "舞蹈",↵ "体育"↵ ]↵ }↵ } code
    • @MuznaZafar 哎呀,我打错了(resposeJson 应该是responseJson)。我用修复更新了我的答案。可以再试一次吗?
    • 我已经找出了错字并更正了它,它仍然对我不起作用:(
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 2016-08-19
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多