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

Cypress如何基于请求体拦截同端点的多个相同POST请求

问题原因

你现有代码的核心问题是未正确获取请求体字段:Cypress拦截回调中的请求体存储在req.body属性下,直接访问req.locations无法获取到对应字段,导致判断逻辑失效。同时直接在拦截回调中写断言,会导致不符合条件的请求进入回调时直接抛出断言失败,中断用例执行。

解决方案

通过在拦截回调中判断请求体字段,仅给符合条件的请求分配别名,即可精准区分同端点不同请求体的请求。

单请求拦截(仅匹配locations长度>3的请求)

cy.intercept("POST", "**/spot", (req) => {
  // 仅当请求体中locations数组长度>3时,给当前请求分配postSPOT1别名
  if (req.body?.locations?.length > 3) {
    req.alias = 'postSPOT1'
  }
})
Weather.activateSPOTWeather()
// wait只会等待符合上述条件的请求返回
cy.wait('@postSPOT1').its('response.statusCode').should("eq", 200)

多请求同时拦截(分别匹配两次不同的请求)

如果需要同时验证两次请求,可根据不同的数组长度分配不同别名:

cy.intercept("POST", "**/spot", (req) => {
  const locLength = req.body?.locations?.length
  if (locLength === 2) req.alias = 'postSPOTLength2'
  if (locLength === 4) req.alias = 'postSPOTLength4'
})
Weather.activateSPOTWeather()
// 分别等待两次请求返回并验证
cy.wait('@postSPOTLength2').its('response.statusCode').should("eq", 200)
cy.wait('@postSPOTLength4').its('response.statusCode').should("eq", 200)

注意事项

  • 代码中使用可选链操作符?.是为了避免部分请求无locations字段时报错,你也可以根据实际业务场景调整判断逻辑。
  • 如果你的请求体是FormData、序列化字符串等非JSON格式,需要先自行解析为对象后再做字段判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:54:02