使用 javascript 和 Postman 计算 JSON 数组中的记录
Posted
技术标签:
【中文标题】使用 javascript 和 Postman 计算 JSON 数组中的记录【英文标题】:Counting records in JSON array using javascript and Postman 【发布时间】:2016-06-29 11:05:27 【问题描述】:我有一个返回 2 条记录的控件:
"value": [
"ID": 5,
"Pupil": 1900031265,
"Offer": false,
,
"ID": 8,
"Pupil": 1900035302,
"Offer": false,
"OfferDetail": ""
]
我需要通过 Postman 进行测试,我返回了 2 条记录。我尝试了在这里和其他地方找到的各种方法,但没有运气。使用下面的代码无法返回预期的答案。
responseJson = JSON.parse(responseBody);
var list = responseBody.length;
tests["Expected number"] = list === undefined || list.length === 2;
此时我不确定是我正在测试的 API 有问题还是我的编码有问题 - 我尝试循环遍历返回的项目,但这对我也不起作用。有人可以建议 - 我是 javascript 新手,所以我希望我的问题有一个明显的原因,但我没有看到它。非常感谢。
【问题讨论】:
responseJson
是一个对象读取密钥value
然后length
您的 json 数组的长度为 1 个名为“value”的对象,但您的“value”对象的长度应为 2。请改为检查 responseJson.value
长度。
【参考方案1】:
您的响应正文是一个对象,您找不到对象的长度尝试
var list = responseJson.value.length;
【讨论】:
【参考方案2】:如 cmets 中所述,您应该测试 responseJson.value.length
responseJson = JSON.parse(responseBody);
tests["Expected number"] = typeof responseJson === 'undefined' || responseJson.value.length;
【讨论】:
【参考方案3】:更正你的 json。试试这个。
========================v
var test = JSON.parse('"value": ["ID": 5,"Pupil": 1900031265,"Offer": false,"ID": 8,"Pupil": 1900035302,"Offer": false,"OfferDetail": ""] ')
test.value.length; // 2
所以你需要识别json中的数组(以[
括号开头。然后取key然后检查key
的length
。
【讨论】:
【参考方案4】:在邮递员的Tests
部分下,执行以下操作(截图如下):
var body = JSON.parse(responseBody);
tests["Count: " + body.value.length] = true;
这是您应该看到的(注意:我将 responseBody
替换为 JSON 以模拟上面的示例):
【讨论】:
我将此添加到一个大型响应中,但它永远不会返回,只是说加载了几个小时。 @ConnieDeCinko 我已经为大数据做了这个,这个代码对我有用var body = JSON.parse(responseBody); tests["Count: " + body.length] = true;
【参考方案5】:
我有一个类似的问题,我曾经测试一定数量的数组成员是:
responseJson = JSON.parse(responseBody);
tests["Response Body = []"] = responseJson.length === valueYouAreCheckingFor;
要检查您获得的值,请将其打印并检查邮递员控制台。
console.log(responseJson.length);
【讨论】:
【参考方案6】:我在验证 JSON 中的数组长度时遇到了类似的问题。下面的 sn-p 应该可以帮助您解决它-
responseJson = JSON.parse(responseBody);
var list = responseBody.length;
tests["Expected number"] = responseJson.value.length === list;
【讨论】:
【参考方案7】:工作代码
pm.test("Verify the number of records",function()
var response = JSON.parse(responseBody);
pm.expect(Object.keys(response.value).length).to.eql(5);
);
//Please change the value in to.eql function as per your requirement
//'value' is the JSON notation name for this example and can change as per your JSON
【讨论】:
【参考方案8】:这就是我为计算记录所做的工作
//parsing the Response body to a variable
responseJson = JSON.parse(responseBody);
//Finding the length of the Response Array
var list = responseJson.length;
console.log(list);
tests["Validate service retuns 70 records"] = list === 70;
【讨论】:
【参考方案9】:首先您应该将响应转换为 json 并找到值路径。值是数组。您应该调用 length 函数以获取其中有多少个对象并检查您的预期大小
pm.test("Validate value count", function ()
pm.expect(pm.response.json().value.length).to.eq(2);
);
【讨论】:
【参考方案10】:这是我想出的最简单的方法:
pm.expect(Object.keys(pm.response.json()).length).to.eql(18);
无需为您的变量自定义任何内容。只需复制、粘贴并将“18”调整为您期望的任何数字。
【讨论】:
我得到:AssertionError: expected 3 to deeply equal 10 @liquide 这可能只是意味着您的测试正确失败。这并不意味着测试是错误的。【参考方案11】:在一个数组中仅断言 2 个对象的更新版本:
pm.test("Only 2 objects in array", function ()
pm.expect(pm.response.json().length).to.eql(2);
);
【讨论】:
以上是关于使用 javascript 和 Postman 计算 JSON 数组中的记录的主要内容,如果未能解决你的问题,请参考以下文章
文件上传正在使用 Postman,但不适用于从浏览器运行的 Javascript
运行 Postman jetpack 测试思想 Newman 命令