Postman API测试:POST响应中值的类型断言验证异常
问题原因及解决方案
原代码的核心问题
- 响应结构定位错误:你的响应是数组类型,
jsonData是数组实例,直接访问jsonData.customerActivity会得到undefined。_.each遍历undefined时不会执行循环体里的断言逻辑,导致测试直接“成功”,根本没检查到clientCode的类型。 - 字段路径错误:即使定位到
customerActivity,每个元素里的clientCode嵌套路径是CustomerActivity -> Client -> clientCode,原代码里的item.clientCode完全找不到对应字段,同样会因为访问不到而没触发断言。
修正后的测试代码
let jsonData = pm.response.json() pm.test("clientCode is a number", () => { // 先确认响应数组有元素,且存在customerActivity列表 pm.expect(jsonData).to.be.an("array").that.is.not.empty; const customerActivities = jsonData[0].customerActivity; pm.expect(customerActivities).to.be.an("array").that.is.not.empty; // 遍历每个客户活动项 _.each(customerActivities, (activityItem) => { // 逐层断言字段存在,避免TypeError pm.expect(activityItem).to.have.property("CustomerActivity"); pm.expect(activityItem.CustomerActivity).to.have.property("Client"); pm.expect(activityItem.CustomerActivity.Client).to.have.property("clientCode"); // 最终断言类型 pm.expect(activityItem.CustomerActivity.Client.clientCode).to.be.an("number"); }) })
额外说明
- 加入前置断言(检查数组非空、字段存在)可以避免出现
TypeError: Cannot read properties of undefined,同时确保测试逻辑真正执行。 - 如果你的响应可能有多个顶层数组元素,需要调整遍历逻辑(比如先遍历
jsonData数组,再处理每个元素的customerActivity)。 - 现在运行测试,
clientCode是字符串类型的"TEST001"、"TEST002",会触发断言失败,符合预期。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

