Postman如何不使用CSV或其他数据文件为单个接口发送不同测试用例
完全可以实现,你当前的整体思路是对的,只需要修正两处代码错误,再加一套循环执行逻辑即可:
你现有代码的问题
- 你用到的
data变量是Postman集合运行时导入外部数据文件才会自动生成的变量,不使用外部文件的情况下这个变量不存在,会直接报错 postman.setNextRequest()方法的入参是Postman中请求的名称字符串,不是请求体内容,你原来的传参会导致执行失败
具体实现方案
这个方案完全不需要依赖任何外部文件,所有测试用例直接写在Postman脚本内即可:
1. 配置接口前置脚本
在你当前接口的Pre-request Script标签下替换为以下代码:
// 首次执行时初始化迭代索引和所有测试用例 if (!pm.globals.has('current_case_idx')) { pm.globals.set('current_case_idx', 0) // 所有测试用例直接写在这里,需要新增直接在数组里加就行 pm.globals.set('test_cases', JSON.stringify([ { "test": "yusuf-klmn", "imageUrl": "", "name":"lop-kjm", "test2": "yusufplm", "type": "Product", "category": "string", "price": 0, "salePrice": 0, "currency": "TRY", "taxRatio": 0, "salesUrl": "" }, { "test": "yusuf-klmn-2", "imageUrl": "", "name":"lop-kjm-2", "test2": "yusufplm-2", "type": "Product", "category": "string", "price": 100, "salePrice": 80, "currency": "TRY", "taxRatio": 18, "salesUrl": "https://example.com" } ])) } // 读取当前用例,设置为请求体变量 const currentIdx = parseInt(pm.globals.get('current_case_idx')) const allCases = JSON.parse(pm.globals.get('test_cases')) // 保持你原来的数组格式请求体 pm.globals.set('req_body', JSON.stringify([allCases[currentIdx]])) // 索引自增,准备下一次执行 pm.globals.set('current_case_idx', currentIdx + 1)
2. 配置接口测试脚本
在你当前接口的Tests标签下添加以下代码,控制循环执行逻辑:
const currentIdx = parseInt(pm.globals.get('current_case_idx')) const allCases = JSON.parse(pm.globals.get('test_cases')) if (currentIdx < allCases.length) { // 还有未执行的用例,继续执行当前接口 // 注意:这里要替换为你这个接口在Postman里的实际名称,大小写、空格必须完全一致 postman.setNextRequest("你的接口请求名称") } else { // 所有用例执行完成,清理全局变量 pm.globals.unset('current_case_idx') pm.globals.unset('test_cases') pm.globals.unset('req_body') postman.setNextRequest(null) }
3. 执行方式
你的请求体保持原来的{{req_body}}即可,打开Postman集合Runner,选择当前接口所在的集合,迭代次数设置为大于等于你的测试用例数量即可,不需要选择任何外部数据文件,直接运行就会自动按顺序执行所有你写在脚本里的测试用例。
简化替代方案
如果你的测试用例数量很少,也可以直接复制多个相同的接口请求,每个请求单独设置不同的请求体,按顺序放在集合内,直接运行集合即可,优点是逻辑简单,缺点是修改用例时需要同步修改多个请求。
内容的提问来源于stack exchange,提问作者Yusuf ÖZTÜRK
相关产品推荐
相关产品推荐

