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

Cypress向后端发送两次请求但GUI仅显示单次的问题咨询

问题相关测试代码
let rxId = "";
let basketAuthToken = "";
let basketId = "";
let replacedBody = "";
cy.fixture(`payload/${ordersPostPayload}`).then((Body) => {
  cy.readFile(`temp/resultIdFile.json`).then((resultIdFile) => {
    Id = resultIdFile.lastSucceededRxId;
    basketAuthToken = resultIdFile.baskets[0].authToken;
    basketId = resultIdFile.baskets[0].basketId;
    cy.log(`the value of the read value is ${Id}`);
    replacedBody = JSON.stringify(Body).split(`$Id`).join(Id);
    cy.writeFile(`temp/ordersPostPayload.json`, replacedBody);

    cy.request({
      method: "POST",
      url: `https://***/ops/orders`,
      headers: {
        "Content-Type": "application/json",
        Channel: "**",
        "EsbApi-Subscription-Key": `****`,
        "Accept-Language": `en-US`,
        "basket-token": basketAuthToken,
        "basket-id": basketId,
        redirectUrl: "****/evaluate-payment",
        cancelUrl: "****/evaluate-payment"
      },
      body: replacedBody,
      failOnStatusCode: false
    }).then((response) => {
      cy.writeFile("temp/result.json", response);
    });
  });
});
常见原因
  • Cypress cy.request 默认开启重定向跟随:如果POST请求得到后端返回的307/308状态码,Cypress会自动携带相同请求体、用相同请求方法向重定向地址再发一次请求,GUI默认仅展示最终的请求记录,不会显示第一次的重定向请求。
  • 重试配置触发重复请求:如果Cypress全局配置了测试重试,或自定义了cy.request的重试逻辑,非2xx响应会触发重试,导致重复发送请求。
  • 代码块被重复执行:这段请求代码如果写在beforeEach、afterEach等会重复触发的钩子中,或测试用例被重复加载,会导致代码执行两次。
  • 后端日志重复打印:后端日志中间件可能存在重复打印逻辑,同一个请求被记录了两次。
排查步骤
  • 确认Cypress实际请求发送情况:启动Cypress时添加环境变量DEBUG=cypress:server:request,运行测试后查看控制台输出,可看到所有实际发出的请求记录,确认是否真的发送了两次。
  • 禁用重定向跟随验证:修改cy.request配置,添加followRedirect: false,再次运行测试查看返回状态码,如果返回3xx类型状态码,说明是重定向导致的重复请求。
  • 验证代码执行次数:在cy.request代码前添加cy.log("发起请求"),查看GUI的日志打印次数,如果打印了两次说明代码被重复执行。
  • 抓包验证:本地测试时通过Fiddler、Wireshark等工具抓对应端口的请求包,直接确认实际发出的请求数量。
  • 核对后端请求ID:查看两条后端日志的请求ID、时间戳,如果完全一致说明是后端日志重复打印,并非两次请求。
解决方法
  • 重定向导致的问题:如果不需要跟随重定向,保留followRedirect: false配置即可;如果需要重定向,可调整后端逻辑对POST请求返回302/303状态码,Cypress会自动转为GET请求重定向,不会重复发送POST。
  • 重试导致的问题:给当前cy.request单独添加retry: false配置,或调整全局重试规则,排除非幂等的POST请求的重试逻辑。
  • 代码重复执行的问题:将请求代码迁移到仅执行一次的before钩子,或者单独的it测试块中,避免重复触发。
  • 日志重复的问题:调整后端日志打印逻辑,避免同一个请求被多次记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:02