如何将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自定义命令:
- 在
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 })
- 任意测试文件中调用方式:
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
相关产品推荐
相关产品推荐

