如何为递归Cypress请求函数添加Promise超时机制?
为Cypress递归查询函数添加超时限制
问题背景
我编写了递归函数resWait,通过Cypress的cy.req发送GET请求查询交易确认状态,若状态未为Confirmed,则等待3秒后重复调用该函数。希望为该函数设置2分钟的超时限制,一旦执行超时则进入后续测试流程,想通过Promise实现这一超时功能,但不清楚如何将Promise与现有函数整合,现有一个sleep的Promise示例,请求指导实现。
现有resWait函数:
function resWait() { cy.req( 'GET', `${url}/transaction/acquirertrxquery?acquirerId=1&dateFrom=${actualDate}%2000:00:00&dateTo=${actualDate}%2023:59:00&externalId=${idExternal}` ).then((res) => { if (res.body.content[0].trxConfirmationStatus.description === 'Confirmed') { return } cy.wait(3000) resWait() }) }
现有sleep Promise示例:
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
解决方案
将递归查询逻辑封装为Promise,同时结合超时判断实现需求,避免与Cypress命令队列冲突:
function resWaitWithTimeout() { // 设定2分钟超时(120000毫秒)与3秒查询间隔 const TIMEOUT = 120000; const CHECK_INTERVAL = 3000; // 封装递归查询为Promise const checkTransactionStatus = () => { return new Promise((resolve, reject) => { const startTime = Date.now(); const recursiveCheck = () => { cy.req( 'GET', `${url}/transaction/acquirertrxquery?acquirerId=1&dateFrom=${actualDate}%2000:00:00&dateTo=${actualDate}%2023:59:00&externalId=${idExternal}` ).then(res => { const status = res.body.content[0].trxConfirmationStatus.description; if (status === 'Confirmed') { resolve('交易已确认'); return; } // 检查是否超时 if (Date.now() - startTime >= TIMEOUT) { reject(new Error('交易确认查询超时')); return; } // 等待后继续递归查询 sleep(CHECK_INTERVAL).then(recursiveCheck); }).catch(err => { // 请求失败时终止并抛出错误 reject(new Error(`查询请求失败:${err.message}`)); }); }; recursiveCheck(); }); }; // 执行查询,超时或失败后不中断测试,直接进入后续流程 checkTransactionStatus() .then(msg => cy.log(msg)) .catch(err => { cy.log(err.message); // 此处可添加超时后的自定义处理逻辑 }); } // 保留原sleep函数 function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
核心说明
- Promise化递归逻辑:把循环查询的过程包装成Promise,便于用
then/catch统一处理成功、超时及错误场景 - 超时判断机制:记录查询起始时间,每次递归前校验已耗时,超过阈值则主动终止并触发超时逻辑
- 替换
cy.wait:使用原生sleepPromise替代Cypress的cy.wait,避免命令队列时序冲突,确保异步逻辑可控 - 无中断测试流程:
catch块仅记录日志不抛出错误,保证超时后测试能继续执行后续步骤
内容的提问来源于stack exchange,提问作者EFPM_S
相关产品推荐
相关产品推荐

