如何在Postman中将指定函数设为全局函数并实现断言重试?
Postman全局重试函数配置与使用指南
一、将函数设置为Postman全局可用函数
- 打开Postman,选中目标集合,点击右上角「...」按钮选择「Edit」进入集合编辑界面。
- 切换到「Pre-request Script」标签页,将以下修改后的工具函数代码粘贴进去:
// 定义全局工具函数集 window.commonUtils = (() => { var sleep = (sleepDuration) => { var startTime = new Date().getTime(); while (new Date().getTime() - startTime < sleepDuration) {} } var sleepByAsyncDelayTime = () => { var sleepDuration = pm.environment.get('asyncDelayTime') || 0; sleep(sleepDuration); } var retryOnFailure = (predicate, numberOfRetrys, sleepDuration, reRouteRequestName, postmanAssertions) => { var retryCountPerReq_key = request.name + '_retry_count'; var retryCountPerReq = pm.environment.get(retryCountPerReq_key) || 0; var reflowCountPerReq_key = request.name + '_reflow_count'; var reflowCountPerReq = pm.environment.get(reflowCountPerReq_key) || 0; var totalReflowCount_key = 'totalReflowCount'; var totalReflowCount = pm.environment.get(totalReflowCount_key) || 0; var maxReflowCounter = pm.environment.get('maxReflowCounter') || 0; var maxReflowCounterPerReq = pm.environment.get('maxReflowCounterPerReq') || 0; function clearAndExit() { pm.environment.unset(retryCountPerReq_key); pm.environment.unset(reflowCountPerReq_key); postmanAssertions(); } function retry() { sleep(sleepDuration); pm.environment.set(retryCountPerReq_key, ++retryCountPerReq); postman.setNextRequest(request.name); } function reFlow() { if (totalReflowCount < maxReflowCounter && reflowCountPerReq < maxReflowCounterPerReq) { pm.environment.unset(retryCountPerReq_key); pm.environment.set(totalReflowCount_key, ++totalReflowCount); pm.environment.set(reflowCountPerReq_key, ++reflowCountPerReq); postman.setNextRequest(reRouteRequestName); } else clearAndExit(); } if (predicate()) clearAndExit(); else if (retryCountPerReq < numberOfRetrys) retry(); else if (reRouteRequestName != '') reFlow(); else clearAndExit(); } return { sleepByAsyncDelayTime, sleep, retryOnFailure }; })();
- 点击「Save」保存集合设置,此时该集合下所有请求都能直接调用
commonUtils中的函数。
二、在测试脚本中使用重试函数
在需要添加重试断言的请求的「Tests」标签页中,按以下示例编写代码:
// 1. 定义你的断言逻辑 function runMyAssertions() { pm.test("响应状态码为200", () => { pm.response.to.have.status(200); }); pm.test("响应返回有效数据ID", () => { pm.expect(pm.response.json().data).to.have.property('id'); }); } // 2. 调用重试函数实现断言重试 commonUtils.retryOnFailure( // 判断条件:返回true则代表断言通过,终止重试 () => pm.response.code === 200 && pm.response.json().data?.id, 3, // 最大重试次数 2000, // 每次重试间隔(毫秒) "", // 重试全部失败后跳转的请求名称(不需要则留空) runMyAssertions // 最终执行的断言函数 );
三、Collection Runner运行注意事项
- 提前配置好所需环境变量:
asyncDelayTime(异步等待时长)、maxReflowCounter(全局最大重定向次数)、maxReflowCounterPerReq(单请求最大重定向次数),无需特殊配置可设为0。 - 运行集合时,确保勾选「Keep variable values」选项,保证重试过程中环境变量能正确更新。
- 设置足够的「Iterations」次数(建议大于重试次数+1),避免因迭代次数不足导致重试流程提前终止。
内容的提问来源于stack exchange,提问作者Ibene Liz Mathew
相关产品推荐
相关产品推荐

