使用 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然后检查keylength

【讨论】:

【参考方案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 命令

javascript Express 2 - MySQL和Postman

Postman 的使用

为啥Javascript只将回车计为一个字符,而它是两个?

javascript postman_token