【问题标题】:Counting records in JSON array using javascript and Postman使用 javascript 和 Postman 计算 JSON 数组中的记录
【发布时间】: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 长度。

标签: javascript json postman


【解决方案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);
                  });
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-08-08
                    • 2016-08-23
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-07-13
                    • 1970-01-01
                    相关资源
                    最近更新 更多