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

如何将Cypress中request请求的body保存为变量供其他请求复用

Cypress 复用请求Body的实现方法

方法1:同上下文直接定义变量(最简单)

直接把需要复用的Body内容抽出来定义为普通JS变量,同一测试文件/同一测试上下文内所有请求都可以直接调用,且Random生成的字段值只会生成一次,保证所有请求使用的参数一致。
代码示例:

// 提前定义复用的Body
const affiliateCreateBody = {
  "address": Random.address,
  "address_complement": Random.address_complement,
  "address_city": Random.address_city,
  "address_number": `${Random.address_number}`,
  "address_district": Random.address_district,
  "address_state": Random.address_state,
  "cep": `${Random.cep}`,
  "cnpj": Random.cnpj,
  "company_name": Random.company_name,
  "headquarters": fAffiliate.headquarters[1],
  "ie": `${Random.ie}`,
  "phone": Random.phone,
  "rntrc": `${Random.rntrc}`,
  "status": fAffiliate.status[0],
  "trading_name": Random.trading_name
}

// 原请求简化为
cy.request({
    url: "/api/affiliate/create",
    method: "POST",
    headers:
    {
        Authorization: `bearer ${access_token}`,
    },
    body: affiliateCreateBody
})

其他请求需要使用时直接传入affiliateCreateBody变量即可。


方法2:跨测试文件复用

如果需要在多个测试文件里复用该Body,可以把逻辑封装为Cypress自定义命令:

  1. 在cypress/support/commands.js中添加如下代码:
// 加缓存逻辑,保证所有调用拿到的是同一套参数,不需要缓存可以删掉相关逻辑
let cachedAffiliateBody = null
Cypress.Commands.add('getAffiliateCreateBody', (refresh = false) => {
  if (refresh || !cachedAffiliateBody) {
    cachedAffiliateBody = {
      "address": Random.address,
      "address_complement": Random.address_complement,
      "address_city": Random.address_city,
      "address_number": `${Random.address_number}`,
      "address_district": Random.address_district,
      "address_state": Random.address_state,
      "cep": `${Random.cep}`,
      "cnpj": Random.cnpj,
      "company_name": Random.company_name,
      "headquarters": fAffiliate.headquarters[1],
      "ie": `${Random.ie}`,
      "phone": Random.phone,
      "rntrc": `${Random.rntrc}`,
      "status": fAffiliate.status[0],
      "trading_name": Random.trading_name
    }
  }
  return cachedAffiliateBody
})
  1. 任意测试文件中调用方式:
cy.getAffiliateCreateBody().then(body => {
  cy.request({
    url: "/api/affiliate/create",
    method: "POST",
    headers: {
      Authorization: `bearer ${access_token}`,
    },
    body: body
  })
})

注意事项

如果个别请求需要修改部分字段,不要直接修改原变量,避免影响其他复用该Body的请求,使用对象扩展运算符生成新对象即可:

// 仅修改status字段,其余字段和原Body一致
const modifiedBody = {
  ...affiliateCreateBody,
  status: fAffiliate.status[1]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:21:02