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

如何在Cypress中实现无需等待30秒的TOTP 2FA测试

Cypress测试场景下TOTP校验适配解决方案

以下是3种可直接落地的可行方案,按落地优先级排序:

方案1:测试环境配置TOTP校验开关(优先推荐)

后端新增测试环境专属配置项,当识别到请求来自测试环境、或请求头携带预设的测试标识时,直接跳过TOTP校验步骤,无需额外修改测试用例逻辑,适配成本最低。

方案2:Cypress中实时生成有效TOTP令牌

标准TOTP算法的令牌生成本地即可完成,无需等待30秒刷新窗口,可每次执行用例时实时生成当前窗口有效的令牌:

  1. 安装TOTP生成依赖库
    npm install speakeasy --save-dev
  2. 封装Cypress自定义命令
import speakeasy from 'speakeasy'

Cypress.Commands.add('getValidTOTP', (testAccountSecret) => {
  return speakeasy.totp({
    secret: testAccountSecret,
    encoding: 'base32'
  })
})
  1. 测试用例中直接调用生成的令牌填入校验字段即可,注意提前存储测试账号的固定TOTP密钥到Cypress环境变量中。

方案3:Mock TOTP校验接口

如果TOTP校验由前端调用后端接口完成,可以直接在Cypress中拦截校验请求,强制返回校验通过结果,完全绕过TOTP逻辑:

// 替换为你的实际TOTP校验接口路径
cy.intercept('POST', '/api/user/verify-totp', {
  statusCode: 200,
  body: {
    code: 0,
    msg: '校验通过',
    data: {
      accessToken: 'test_login_token'
    }
  }
})

注意事项

  • 所有测试专属的开关、硬编码密钥、Mock逻辑仅可在测试环境启用,禁止泄露到生产环境
  • 选用实时生成TOTP方案时,需保证测试运行设备的系统时间与后端服务器时间误差不超过30秒,避免出现令牌失效问题
  • 选用Mock接口方案时,需保持返回结构与真实接口完全一致,避免测试结果失真

内容的提问来源于stack exchange,提问作者Adrian Góra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:03