Postman校验JSON字段匹配指定值时测试全部误通过问题排查
问题排查结论
你的测试脚本全部误报通过,是两个编写错误导致的:
- 取值路径错误:接口返回的
dhcpServers数组嵌套在result字段下,原脚本直接读取jsonData.dhcpServers拿到的是undefined,lodash的_.each遍历undefined时不会执行循环内的任何代码,三个测试块因为没有抛出任何断言错误,被Postman默认判定为执行通过。 - 断言方法误用:Chai断言库的
.have.body方法是用来校验HTTP响应整体报文内容的,不支持对单个字符串值做等值判断,就算取值路径正确,这个写法也无法正确校验state字段的取值。
另外你提供的响应体里,Unknown是security字段的固定返回值,不是state字段的状态值,写断言时不要混淆两个字段。
修正后的参考脚本
如果你的测试需求是「校验当前所有DHCP服务状态为OK,不存在状态为Unknown/Unreachable的实例」,可以用以下脚本:
const jsonData = pm.response.json() // 修正取值路径 const dhcpServers = jsonData.result.dhcpServers pm.test('所有DHCP服务运行状态为OK', () => { _.each(dhcpServers, (server) => { // 用eql做字符串等值校验 pm.expect(server.state).to.eql('OK') }) }) pm.test('无状态为Unknown的DHCP服务', () => { const unknownServers = _.filter(dhcpServers, server => server.state === 'Unknown') pm.expect(unknownServers.length).to.eql(0) }) pm.test('无状态为Unreachable的DHCP服务', () => { const unreachableServers = _.filter(dhcpServers, server => server.state === 'Unreachable') pm.expect(unreachableServers.length).to.eql(0) })
如果你的测试需求是校验三类状态都存在,只需要把后两个测试的断言改成pm.expect(xxx.length).to.be.above(0)即可。
附:DHCP服务状态枚举说明
Unknown:DHCP服务器控制器状态未知OK:DHCP服务器控制器和服务运行正常Unreachable:DHCP服务器控制器离线或无法访问Out of date:DHCP服务器控制器版本与Central节点不一致Updating:DHCP服务器控制器正在进行版本升级Uninitialized:DHCP服务器所在设备未完成初始化,需要手动操作Detached:DHCP服务器已被分离但未从系统中移除DHCP Service Down:DHCP服务停止,无法响应查询请求DHCP Service Impaired:DHCP服务正在运行但存在功能异常
内容的提问来源于stack exchange,提问作者Lauren Malhoit
相关产品推荐
相关产品推荐

