如何使用JSON测试数据文件批量验证含嵌套元素的JSON响应?
问题
我有一个包含嵌套元素的JSON响应,希望用Postman的测试函数对照JSON测试数据进行验证。目前通过硬编码实现验证:
const jsonData = pm.response.json(); pm.expect(jsonData.items[0].title).to.eql(pm.iterationData.get("title")); pm.expect(jsonData.items[1].title).to.eql(pm.iterationData.get("title"));
我的JSON测试数据文件内容如下:
[ { "title": "Title1" }, { "title": "Title2" } ]
现在想换一种方式实现验证,同时保留现有JSON测试数据结构——比如当测试数据中有100个title需要验证时,无需编写100行重复代码。
解决方案
用循环遍历即可避免重复代码,根据测试运行的方式分两种情况处理:
情况1:一次性验证所有测试数据
如果测试数据是作为完整数组传入(比如存入环境变量),先校验响应与测试数据的长度一致,再循环逐个对比:
const jsonData = pm.response.json(); // 从环境变量读取测试数据并解析为数组(需提前将测试数据存入环境变量) const testData = JSON.parse(pm.environment.get("testData")); // 先确保响应的items数量和测试数据匹配 pm.expect(jsonData.items.length).to.equal(testData.length); // 循环验证每个title jsonData.items.forEach((item, idx) => { pm.expect(item.title).to.eql(testData[idx].title); });
情况2:数据驱动迭代验证
如果是用Postman的数据文件做批量迭代(每次请求对应测试数据里的一条),直接用当前迭代索引匹配响应的items位置:
const jsonData = pm.response.json(); // 获取当前迭代的索引(从0开始计数) const currentIdx = pm.info.iteration; pm.expect(jsonData.items[currentIdx].title).to.eql(pm.iterationData.get("title"));
这种方式下,不管测试数据有多少条,只需一行核心验证代码,Postman会自动遍历所有测试数据完成验证。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

