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

如何用JMeter构建OTP逻辑,实现移动端5万用户登录压测?

实现虚拟邮箱OTP登录的JMeter脚本逻辑

1. 生成唯一虚拟邮箱ID

为每个测试用户生成独立的唯一邮箱,确保线程级隔离:

  • 使用JMeter内置函数生成,示例:
    • 随机字符串+固定域名:${__RandomString(8,abcdefghijklmnopqrstuvwxyz,)}@test-domain.com
    • 递增用户ID+固定域名:user${__counter(TRUE,)}@test-domain.com
  • 将生成的邮箱存储为线程变量(如${virtual_email}),后续所有相关请求直接引用该变量。

2. 触发OTP发送请求

调用录制完成的「提交邮箱获取OTP」API:

  • 将请求中的邮箱参数替换为${virtual_email},保证每个线程发送自身对应的虚拟邮箱。
  • 添加响应断言,验证请求返回状态(如200 OK),确认OTP发送指令已成功触发。

3. 从虚拟邮箱获取OTP

根据你的虚拟邮箱服务类型,选择以下适配方案:

方案A:通过IMAP/POP3协议读取邮件

使用JMeter自带的Mail Reader Sampler:

  1. 在OTP发送请求后添加Mail Reader Sampler。
  2. 配置核心参数:
    • 邮件服务器地址:你的虚拟邮箱IMAP服务器地址(如imap.test-domain.com)
    • 端口:993(SSL加密场景,非SSL用143)
    • 用户名:${virtual_email}
    • 密码:虚拟邮箱的登录密码(无密码验证可留空,依服务配置而定)
    • 搜索条件:设置为「主题包含OTP」或「发件人为系统官方邮箱」,缩小目标邮件范围
  3. 添加正则表达式提取器,从邮件内容中提取OTP:
    • 引用名称:OTP
    • 正则表达式:(\d{6})(假设OTP为6位数字,需根据实际格式调整)
    • 模板:$1$

方案B:通过虚拟邮箱API获取邮件

若你的虚拟邮箱提供REST查询API:

  1. 添加HTTP Request Sampler,调用邮箱查询接口(示例:GET /api/v1/emails/${virtual_email})
  2. 添加JSON Extractor(响应为JSON格式时),从返回结果中提取OTP字段:
    • 引用名称:OTP
    • JSON Path表达式:$.latest_email.content.otp(需根据实际API返回结构调整)

处理邮件延迟问题

邮件发送存在延迟,需添加等待逻辑确保OTP能被成功提取:

  • 使用While Controller,条件设置为${__jexl3(${OTP} == "",)}
  • 控制器内放置「邮件读取请求」和Constant Timer(设置1000毫秒),循环执行直到提取到有效OTP为止。

4. 使用OTP完成登录

调用录制好的「提交OTP登录」API:

  • 将请求中的OTP参数替换为${OTP}
  • 添加响应断言,验证登录结果(如返回用户token或个人信息),确认登录流程完成。

高并发适配注意事项(针对50000用户)

  • 若使用IMAP方案:需确保邮件服务器允许足够的并发连接数,或通过JMeter的HTTP请求默认配置开启连接池复用
  • 优先选择API方案:相比IMAP协议,API的并发性能更优,更适合大规模负载测试场景
  • 分布式测试部署:单台JMeter实例无法支撑5万并发,需采用JMeter分布式部署,多台机器协同压测
  • 虚拟邮箱服务扩容:确保虚拟邮箱系统能同时处理5万条邮件的接收与查询请求

内容的提问来源于stack exchange,提问作者vishakha bharambe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:53:29