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

如何用Cypress测试多因素认证?求免费/低成本OTP读取工具

Cypress中读取MFA OTP的免费/低成本方案

1. 测试环境专用OTP接口(推荐)

如果你的应用有自己的后端,可以在测试环境中添加一个仅用于测试的接口,直接返回指定用户的OTP。这种方式完全可控,无外部依赖,成本最低。

  • 实现思路:后端在生成OTP时,同时将其存储到测试专用的缓存或数据库中,提供一个接口供测试调用,传入用户标识(邮箱/手机号)即可获取当前有效的OTP。
  • Cypress代码示例:
// 完成登录请求,触发OTP发送后
cy.request({
  method: 'POST',
  url: '/test/get-otp', // 测试环境专用接口
  body: {
    email: 'test-mfa-user@example.com'
  }
}).then((res) => {
  const otp = res.data.otp;
  cy.get('#otp-input').type(otp);
  cy.get('#verify-btn').click();
});
  • 优点:稳定可靠,无外部服务依赖,无需额外成本。
  • 缺点:需要后端开发少量代码,仅适用于自己可控的应用。

2. 免费临时邮箱API

利用免费的临时邮箱服务的API来获取邮件内容,解析其中的OTP。这类服务大多提供免费的公开API,适合测试使用。

  • 实现思路:
    1. 测试前调用API生成一个临时邮箱
    2. 使用该邮箱注册用户并启用MFA
    3. 调用API获取收件箱中的邮件,提取OTP
  • Cypress代码示例:
// 生成临时邮箱
cy.request('GET', 'https://www.1secmail.com/api/v1/?action=genRandomMailbox&count=1')
  .then((res) => {
    const testEmail = res.body[0];
    // 填写邮箱并完成注册流程
    cy.get('#email-input').type(testEmail);
    cy.get('#register-btn').click();
    // ... 完成MFA启用步骤,触发OTP发送

    // 轮询获取邮件
    const getOtp = () => {
      const [login, domain] = testEmail.split('@');
      return cy.request(`https://www.1secmail.com/api/v1/?action=getMessages&login=${login}&domain=${domain}`)
        .then((msgsRes) => {
          if (msgsRes.body.length === 0) {
            cy.wait(3000);
            return getOtp(); // 递归轮询,直到收到邮件
          }
          const msgId = msgsRes.body[0].id;
          return cy.request(`https://www.1secmail.com/api/v1/?action=readMessage&login=${login}&domain=${domain}&id=${msgId}`);
        });
    };

    getOtp().then((msgRes) => {
      // 正则匹配6位OTP(根据实际格式调整)
      const otpMatch = msgRes.body.body.match(/\d{6}/);
      if (otpMatch) {
        cy.get('#otp-input').type(otpMatch[0]);
        cy.get('#verify-btn').click();
      }
    });
  });
  • 优点:完全免费,无需额外配置。
  • 缺点:服务稳定性不可控,可能有请求频率限制,仅支持邮件类OTP。

3. Twilio免费试用额度(适合短信OTP)

如果你的MFA是通过短信发送OTP,可以使用Twilio的免费试用账号来接收短信并读取内容。Twilio提供免费的试用额度,足够日常测试使用。

  • 实现思路:
    1. 注册Twilio试用账号,获取一个免费的测试手机号
    2. 在Cypress环境变量中配置Twilio的Account SID、Auth Token和测试手机号
    3. 触发短信OTP发送后,调用Twilio API获取最新短信,提取OTP
  • Cypress代码示例:
// 从环境变量读取Twilio配置
const accountSid = Cypress.env('TWILIO_ACCOUNT_SID');
const authToken = Cypress.env('TWILIO_AUTH_TOKEN');
const testPhone = Cypress.env('TWILIO_TEST_PHONE');

// 完成登录步骤,触发短信OTP发送后
cy.request({
  method: 'GET',
  url: `https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json`,
  auth: {
    user: accountSid,
    pass: authToken
  },
  qs: {
    To: testPhone,
    PageSize: 1 // 获取最新的一条短信
  }
}).then((res) => {
  const latestMsg = res.body.messages[0];
  const otpMatch = latestMsg.body.match(/\d{6}/);
  if (otpMatch) {
    cy.get('#otp-input').type(otpMatch[0]);
    cy.get('#verify-btn').click();
  }
});
  • 优点:支持短信OTP,服务稳定,免费额度足够测试。
  • 缺点:需要注册Twilio账号,试用到期后若需继续使用需付费,但成本较低。

内容的提问来源于stack exchange,提问作者Tirath Sojitra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:40:34