Cypress发起多次接口请求后如何清除请求缓存?
问题修复方案
该错误通常是Cypress对GET请求的默认缓存机制,导致后续请求读取到本地缓存的异常payload触发,可通过以下方式解决:
方案1:单次请求禁用缓存(推荐,影响范围小)
在cy.request的配置项中添加cache: false强制跳过本地缓存,同时可以补充请求头明确告知服务端不使用缓存,修改后代码如下:
for (let i = 0; i < 10; i++) { cy.request({ method: 'GET', url: `https://[API endpoint ]/api/v1/[requst]/${ids[i]}`, headers: { "authorization": token, "Cache-Control": "no-cache", "Pragma": "no-cache" }, cache: false // 禁用Cypress内部请求缓存的核心配置 }) .then((res) => { usernames.push([{ value: res.body.instagrams[0].username }]) }) .then(() => { cy.wait(2000) }) }
方案2:全局禁用请求缓存
如果需要所有测试请求都不走缓存,在Cypress配置文件中添加全局配置即可:
// cypress.config.js(Cypress 10+版本) const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { cache: false, // 其余原有配置保持不变 } }) // 旧版Cypress在cypress.json中添加配置 { "cache": false }
附加排查方案
如果禁用缓存后问题仍然存在,可以增加以下配置定位问题:
- 在
cy.request配置中添加failOnStatusCode: false,先拿到完整响应内容,确认是否为服务端返回的payload本身存在异常 - 每次请求前清空本地存储和Cookie,避免授权信息异常:
// 放在循环内的请求之前执行 cy.clearLocalStorage() cy.clearCookies() - 打印每次请求的
ids[i]取值,确认循环时参数拼接正确,避免异步逻辑导致的参数错误
内容的提问来源于stack exchange,提问作者Ashish Khokhariya
相关产品推荐
相关产品推荐

