如何在 Postman 中遍历每个 JSON 键值对
How to Iterate through each JSON key-value pair in Postman
我正在 POSTMAN 中针对 POST API 请求编写测试,方法是发送 JSON 以下格式的正文数据:
"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. 每个键在请求体中发送的值是响应体中相同键返回的值。例如,如果 "name" 键的值为 "Amber Joseph",则响应键 "name" 也为 returns "Amber Joseph"。但我想为每个键都这样做。此外,密钥每次都可以延迟,例如我可能会或可能不会使用 "name" 密钥发送它,因此我需要一个适用于我发送的任何键值对的通用解决方案。
我可以通过使用循环:
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);
}
但是这个不检查嵌套的键值对individually.I特别想检查"data"对象里面的每个键值对。任何帮助将不胜感激。
谢谢
您可以像这样从请求中获取 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]);
}
从那里,您可以添加要对其余响应执行的任何检查。
我正在 POSTMAN 中针对 POST API 请求编写测试,方法是发送 JSON 以下格式的正文数据:
"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. 每个键在请求体中发送的值是响应体中相同键返回的值。例如,如果 "name" 键的值为 "Amber Joseph",则响应键 "name" 也为 returns "Amber Joseph"。但我想为每个键都这样做。此外,密钥每次都可以延迟,例如我可能会或可能不会使用 "name" 密钥发送它,因此我需要一个适用于我发送的任何键值对的通用解决方案。
我可以通过使用循环:
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);
}
但是这个不检查嵌套的键值对individually.I特别想检查"data"对象里面的每个键值对。任何帮助将不胜感激。
谢谢
您可以像这样从请求中获取 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]);
}
从那里,您可以添加要对其余响应执行的任何检查。