You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Cypress测试绕过Varnish、Redis等缓存并统一添加请求头

解决Cypress全局添加自定义请求头绕过缓存的方案

方法一:修复全局cy.intercept配置(推荐)

你之前用cy.intercept没生效,大概率是拦截规则或头的设置方式不对。在cypress/support/e2e.js的beforeEach里按以下写法配置,就能给所有cy.visit和cy.request自动添加自定义头:

beforeEach(() => {
  // 拦截所有HTTP请求,注入绕过缓存的自定义头
  cy.intercept('*', (req) => {
    req.headers['X-Cypress-Bypass-Cache'] = 'true';
  }).as('bypassCache');
});
  • *表示拦截所有请求,覆盖页面加载的HTML、静态资源及后续接口请求;如果只需要针对站点域名,可替换为https://your-site.com/*
  • 自定义头名称X-Cypress-Bypass-Cache可根据你的Varnish/Redis配置调整
  • 所有测试用例会自动继承该配置,无需手动修改每个请求

方法二:简化自定义命令写法

如果偏好自定义命令,无需复杂流程,直接覆写原有visit和request命令即可:

在cypress/support/commands.js中添加:

// 覆写cy.visit,自动添加自定义头
Cypress.Commands.overwrite('visit', (originalFn, url, options = {}) => {
  options.headers = {
    ...options.headers,
    'X-Cypress-Bypass-Cache': 'true'
  };
  return originalFn(url, options);
});

// 覆写cy.request,兼容两种调用格式:cy.request(url) 或 cy.request(optionsObj)
Cypress.Commands.overwrite('request', (originalFn, options) => {
  if (typeof options === 'string') {
    options = { url: options };
  }
  options.headers = {
    ...options.headers,
    'X-Cypress-Bypass-Cache': 'true'
  };
  return originalFn(options);
});

配置完成后,直接使用原有cy.visit()和cy.request()语法即可,命令会自动带上自定义头。

验证请求头是否生效

可在测试用例中添加断言,确认自定义头已成功注入:

it('确认请求头已添加', () => {
  cy.intercept('*', (req) => {
    expect(req.headers['X-Cypress-Bypass-Cache']).to.equal('true');
  }).as('checkHeader');
  cy.visit('/');
  cy.wait('@checkHeader');
});

内容的提问来源于stack exchange,提问作者Zeth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:26:00