You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组筛选指定条件spId及匹配验证的Postman测试问题求助

Postman测试JSON数据筛选与匹配问题解决

需求说明

  • 从给定JSON数组中获取所有isNumber = true的spId
  • 从给定JSON数组中获取所有isSpecial = true的spId
  • 将上述两类spId与指定数组[1,2,3,4,5,23,34]进行匹配验证

提供的JSON数组

[
    {
        "spId": "1",
        "isNumber": true,
        "isSpecial": true,
        "sportName": "Cricket",
        "ranking": 58,
        "eventnumbers": 666,
        "liveEventCount": 13
    },
    {
        "spId": "5",
        "isNumber": true,
        "isSpecial": false,
        "sportName": "hockey",
        "ranking": 59,
        "eventnumbers": 192,
        "liveEventCount": 15
    },
    {
        "spId": "2",
        "isNumber": false,
        "isSpecial": true,
        "sportName": "football",
        "ranking": 59,
        "eventnumbers": 60,
        "eventCount": 100
    },
    {
        "spId": "23",
        "isNumber": false,
        "isSpecial": false,
        "sportName": "VOLLEY",
        "ranking": 61,
        "eventnumbers": 42,
        "liveEventCount": 4
    }
]

问题描述

使用以下Postman测试代码时,无法得到正确的计数结果:

var isNumber_expected= isNumber_sp_ids.length;
pm.test(`There are ${isNumber_expected} number sports`, function () {
    pm.expect(sports.filter(sport => sport.isNumber).length).to.equal(isNumber_expected);
});

解决方案

原代码存在两个核心问题:

  1. 未定义isNumber_sp_ids变量,导致isNumber_expected取值错误
  2. 未处理spId(字符串类型)与目标数组(数字类型)的类型差异,可能导致匹配验证失败

以下是修正后的完整测试代码:

// 1. 获取响应JSON数据与指定目标SpId数组
const sports = pm.response.json();
const targetSpIds = [1, 2, 3, 4, 5, 23, 34];

// 2. 处理isNumber=true的spId筛选与验证
const isNumberSpIds = sports
  .filter(sport => sport.isNumber === true)
  .map(sport => parseInt(sport.spId, 10)); // 转换为数字类型,统一匹配标准

pm.test("isNumber类型运动数量正确", () => {
  pm.expect(isNumberSpIds.length).to.equal(2); // 对应JSON中spId=1、5的两项
});

pm.test("所有isNumber的spId均匹配指定数组", () => {
  isNumberSpIds.forEach(id => {
    pm.expect(targetSpIds).to.include(id);
  });
});

// 3. 处理isSpecial=true的spId筛选与验证
const isSpecialSpIds = sports
  .filter(sport => sport.isSpecial === true)
  .map(sport => parseInt(sport.spId, 10));

pm.test("isSpecial类型运动数量正确", () => {
  pm.expect(isSpecialSpIds.length).to.equal(2); // 对应JSON中spId=1、2的两项
});

pm.test("所有isSpecial的spId均匹配指定数组", () => {
  isSpecialSpIds.forEach(id => {
    pm.expect(targetSpIds).to.include(id);
  });
});

代码说明

  • 先从响应中解析JSON数据,明确指定目标数组
  • 筛选时严格判断布尔值(=== true)避免隐式类型转换问题
  • 将spId字符串转换为数字,确保与目标数组的类型一致,避免匹配错误
  • 拆分数量验证与匹配验证,让测试逻辑更清晰

内容的提问来源于stack exchange,提问作者susan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:15:38