如何在Postman中验证ca_meter对象包含指定字段
验证JSON中ca_meter对象是否包含cd_st字段
问题说明
你当前的测试代码存在两处关键问题:一是检查的字段为cd_en而非需求的cd_st;二是未做前置校验(比如ca_meter数组是否存在、是否为空),容易因接口结构变化引发无意义报错。
修正后的测试代码
基础版:检查ca_meter第一个对象包含cd_st
// 先解析响应体为JSON对象 const jsonData1 = pm.response.json(); pm.test("ca_meter第一个对象包含cd_st字段", function () { // 前置校验:确保ca_meter是数组且不为空 pm.expect(jsonData1.data[0].ca_meter).to.be.an('array').that.is.not.empty; // 检查目标对象存在cd_st字段 pm.expect(jsonData1.data[0].ca_meter[0]).to.have.property('cd_st'); });
严谨版:检查ca_meter所有对象都包含cd_st
如果需要确保ca_meter数组内每一个对象都存在cd_st字段,可以遍历数组做批量校验:
const jsonData1 = pm.response.json(); pm.test("ca_meter所有对象均包含cd_st字段", function () { pm.expect(jsonData1.data[0].ca_meter).to.be.an('array'); // 遍历ca_meter数组,逐个校验字段存在性 jsonData1.data[0].ca_meter.forEach(meterItem => { pm.expect(meterItem).to.have.property('cd_st'); }); });
补充说明
- 使用
to.have.property('cd_st')比include('cd_st')语义更清晰,更贴合「检查对象是否存在某字段」的测试场景 - 前置校验可以避免因接口返回结构变化(比如
ca_meter为空数组)导致测试直接报错,让测试结果更易解读 - 你提供的原始JSON存在语法错误(
ca_equipment数组未闭合),已修正为合法格式供参考:
{ "total": 1, "data": [ { "ca_equipment": [ { "cd_en": null, "cd_st": "2019-12-17T00:00:00", "ck_d_equipment": "gas_stove", "ck_id": "0223427C700B495490E540C54D3B4528", "ck_model": null, "ck_point": "70C220F236F34CA78EEDC2F4F16EA067", "cl_status": 1, "cv_d_equipment": "Плита", "cv_model_name": null, "cv_number": "Газовая плита : 1" } ], "ca_meter": [ { "cd_en": null, "cd_st": "2019-13-17T00:00:00", "ck_id": "B48D81DD4sdfds4594B68D7D6FD846A410", "ck_model": "99A24F5100F449A99B2C452CA3A9107F", "ck_point": "70C220F23gsds34CA78EEDC2F4F16EA067", "cl_status": 1, "cv_model_name": "sdf", "cv_number": "325233" } ] } ] }
内容的提问来源于stack exchange,提问作者user23935724
相关产品推荐
相关产品推荐

