如何在不同Cypress文件调用函数?多API登录流实现方案
多API串联的Cypress登录自定义命令实现
你可以通过**链式调用cy.request()**实现多步API的登录流程,利用Cypress命令的异步特性,将前一个API的返回结果传递给下一个请求,最终存储第三个API返回的JWT。以下是具体实现:
Cypress.Commands.add('login', () => { // 第一步:调用初始登录API,获取第一个JWT cy.request({ method: 'POST', url: '/api/first-login', // 替换为你的第一个API地址 body: { username: Cypress.env('TEST_USER'), // 建议从环境变量读取账号密码 password: Cypress.env('TEST_PWD') } }).then((firstResp) => { const firstToken = firstResp.body.token; // 提取第一个API返回的JWT // 第二步:用第一个JWT调用第二个API return cy.request({ method: 'POST', url: '/api/second-step', // 替换为你的第二个API地址 headers: { Authorization: `Bearer ${firstToken}` // 携带第一个JWT作为身份凭证 } // 若第二个API需要请求体,在此补充 }); }).then((secondResp) => { const secondToken = secondResp.body.token; // 提取第二个API返回的JWT // 第三步:用第二个JWT调用第三个API return cy.request({ method: 'POST', url: '/api/third-step', // 替换为你的第三个API地址 headers: { Authorization: `Bearer ${secondToken}` // 携带第二个JWT作为身份凭证 } // 若第三个API需要请求体,在此补充 }); }).then((thirdResp) => { const finalToken = thirdResp.body.user.token; // 提取第三个API返回的最终JWT window.localStorage.setItem('jwt', finalToken); // 存储到localStorage return finalToken; // 可选:返回token,方便spec文件后续直接使用 }); });
关键说明:
- 链式调用逻辑:每个
cy.request()的结果通过.then()传递,确保前一步API执行完成后再启动下一步,契合Cypress异步执行规则。 - 敏感信息管理:测试账号密码建议存在Cypress环境变量(如
cypress.env.json)中,避免硬编码泄露。 - 凭证传递:后续API通过
headers携带上一步的JWT,完全模拟真实登录流程的身份验证逻辑。 - 灵活扩展:最后一步返回最终token,你可以在spec文件中通过
cy.login().then((token) => { ... })直接使用该token做其他操作。
在spec文件中的调用方式和之前一致:
beforeEach(() => { cy.login(); // 每次测试前执行完整多步登录流程 });
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

