Cypress中是否可延迟上传请求?适配多上传测试取消场景
多文件上传首请求取消测试的请求时机控制方案
修正版cy.intercept配置(解决之前500报错问题)
之前配置cy.intercept出现500错误,核心原因是配置时错误覆写了请求/响应链路,没有透传真实业务接口的流量,正确配置方式为:
- 匹配上传接口路径时,不硬编码返回响应体,通过响应事件注入延迟,完全保留原请求、原响应的完整逻辑
- 可参考的可运行代码:
// 匹配所有上传接口,为每个请求注入固定延迟,不修改流量内容 cy.intercept('/your-upload-api-path', (req) => { // 注入2s的响应延迟,让请求保持pending状态足够久 req.on('response', (res) => { res.setDelay(2000) }) }).as('multiUpload') - 配置说明:
- 不要在intercept参数中写
response: {}这类硬编码返回,这是触发500错误的主要诱因 - 不要直接拦截请求返回假数据,所有延迟逻辑都要基于透传的真实请求实现
- 延迟时长可根据手动操作取消的耗时动态调整,保证请求进入pending状态时,测试代码能顺利执行取消动作
- 不要在intercept参数中写
精准捕获首个上传请求句柄实现定向取消
多请求同时发起时,不需要靠全局弱网制造延迟,可以在intercept回调中按请求到达顺序做标记,定向给第一个请求加长延迟:
- 可参考代码逻辑:
let pendingFirstRequest = null cy.intercept('/your-upload-api-path', (req) => { // 首个到达的上传请求做标记,单独加长延迟 if (!pendingFirstRequest) { pendingFirstRequest = req req.on('response', (res) => { // 给首个请求留3s的操作窗口,足够执行取消操作 res.setDelay(3000) }) } }) - 取消操作触发时机:拿到
pendingFirstRequest句柄后,调用对应业务逻辑的取消接口,或直接通过网络层销毁该请求,验证其余无标记的上传请求可以不受干扰、正常完成上传
弱网模拟的生效配置修正
之前使用cy.network({ mode: 'SLOW3G' })不生效、或调用Cypress.automation('remote:debugger:protocol')没反应,核心原因是没有配套开启Chrome调试协议的网络控制域,直接传入网络参数会被协议静默丢弃。正确配置链路为:
- 测试前置阶段先通过调试协议发送
Network.enable指令,初始化网络流量控制能力,再传入弱网相关参数 - 弱网模拟仅对完全透传的请求生效,不要和存在逻辑中断的intercept配置混用,避免触发接口报错
测试执行注意事项
- 不需要依赖大体积文件制造上传耗时,既可以缩短测试执行时长,也能避免触发前端分片上传逻辑打乱单请求的测试边界
- 测试断言需要覆盖两个核心校验点:一是首个被取消的请求状态为canceled,二是其余上传请求的响应状态为200,无连带失败
- 操作取消时需要对齐业务真实的取消触发逻辑,不要仅靠网络层强制中断来替代前端的按钮触发逻辑
内容的提问来源于stack exchange,提问作者Jovan Cvetkovic
相关产品推荐
相关产品推荐

