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

如何在不同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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:48:20