Postman单元测试校验接口响应数组中Outlet1库存及其余门店库存值问题
问题分析
是否需要用循环编写测试用例
是,你需要通过循环遍历所有非Outlet1的返回条目,逐个校验Inventory值,无法通过单条断言覆盖所有校验场景。
现有代码的错误原因
- 第一层判断逻辑错误:
jsonData是数组类型,直接访问jsonData.Outlet得到的是undefined,因此if (jsonData.Outlet !== "Outlet1")的条件永远不成立,包裹在内的校验逻辑完全不会执行,测试用例没有运行任何断言就默认返回通过。 - 循环内的查找逻辑错误:即使去掉错误的if判断,
forEach循环内调用find()方法每次只会返回第一个符合「Outlet不等于Outlet1」的条目(也就是固定返回Outlet2),永远只会校验Outlet2的Inventory值,根本不会遍历到Outlet3、Outlet4,自然发现不了Outlet3的数值错误。
修复后的测试代码
pm.test("Inventory.OnHand Outlet1 == 12", () => { const Outlet1Result = jsonData.find(a => a.Outlet === "Outlet1"); // 新增非空判断,避免接口未返回Outlet1时报错不明确 pm.expect(Outlet1Result, "返回结果中缺失Outlet1条目").to.exist; pm.expect(Outlet1Result.Inventory).to.eql(12); }); pm.test("Inventory.OnHand 非Outlet1条目均等于0", () => { // 先筛选所有非Outlet1的条目 const otherOutletList = jsonData.filter(item => item.Outlet !== "Outlet1"); // 遍历每个条目做校验 otherOutletList.forEach(outletItem => { pm.expect(outletItem.Inventory, `${outletItem.Outlet}的Inventory值不符合要求`).to.eql(0); }); });
修复后运行测试时,会正常捕获到Outlet3的Inventory值为3的错误,符合预期的失败结果。
内容的提问来源于stack exchange,提问作者Ferdiansyah R
相关产品推荐
相关产品推荐

