如何遍历邮递员中的每个JSON键值对

时间:2019-11-26 03:24:45

标签: javascript json postman postman-testcase

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

"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.在请求正文中为每个键发送的值是响应正文中相同键返回的值。例如,如果“名称”键的值为“琥珀色约瑟夫”,则响应键“名称”也返回“琥珀色约瑟夫”。但是我想为每个键做到这一点。同样,键每次都可能延迟,例如我可能会或可能不会使用“名称”键发送它,因此我需要适用于我发送的任何键值对的通用解决方案。

我可以使用以下方法遍历:

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);
    } 

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

谢谢

1 个答案:

答案 0 :(得分: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]);
}

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