前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手机号验证码登录性能测试

手机号验证码登录性能测试

作者头像
FunTester
发布2020-04-15 10:10:29
4.6K0
发布2020-04-15 10:10:29
举报
文章被收录于专栏:FunTesterFunTester

这两天遭遇了手机号登录相关的压测需求,算是比较棘手的。主要原因有两个,第一:之前从来没有接手过这个项目,不熟悉各种规则;第二:数据量偏大,需要开发配合协调校验规则。

业务逻辑:

  • 请求发送验证码接口,发送成功(已绑定的手机号,且有效的用户状态)可以获取到登录的一个参数traceNo
  • 使用traceNo、短信验证码、手机号请求登录接口

基本的校验规则如下:

  • 手机号校验,排除一些不存在的号段,11位数字类型(接口传string类型)
  • 间隔(60s)内不允许发第二条短信,短信有效期同隔间
  • 自然天不允许发10条以上的短信
  • 验证码随机和traceNo必需从发送验证码接口获得

解决方案:

  • 限制条件已经做成可配置,可以随时更改重启服务即可
  • 选中14号段,用户手机号=14+uid
  • 测试环境固定验证码

测试方案:

  • 将发送验证码和短信登录两个接口放在一起压测,需要准备一批测试用户
  • 单个线程绑定一个用户,然后不停地发送验证码和使用验证码登录
  • 增加基类属性phone和模块类属性lastTraceNo来完成参数传递

压测脚本:

  • threadmark用来标记任务的,我在模块方法里面返回了token,表示唯一用户登录接口请求操作,方便开发追踪日志。
代码语言:javascript
复制
/**
 * 100个用户通过发短信然后通过验证码登录
 */
class LoginByTel extends OkayBase {

    public static void main(String[] args) {
        def argsUtil = new ArgsUtil(args)
        def thread = argsUtil.getIntOrdefault(0, 100)
        def times = argsUtil.getIntOrdefault(1, 50)
        ClientManage.init(10000, 5000, 0)

        def threads = []
        thread.times {
            def base = getBase(it)
            def info = new UserInfo(base)
            threads << new LoginTel(info, times)
        }

        new Concurrent(threads, "学生留存1.2.3手机验证码登录").start()
        FanLibrary.testOver()
    }

    static class LoginTel extends ThreadLimitTimesCount<UserInfo> {

        public LoginTel(UserInfo info, int times) {
            super(info, times, null)
        }


        @Override
        protected void doing() throws Exception {
            threadmark = t.loginByTel()

        }
    }
}

模块类方法:

代码语言:javascript
复制
    /**
     * 手机号登录
     */
    public String loginByTel() {
        sendCodeOffline(2, phone);
        String url = Profile.LOGIN;
        JSONObject params = getParams();
        params.put("login_mode", 2);
        params.put("params", getJson("code=" + Profile.LOGIN_CODE, "phone=" + phone));
        JSONObject response = getPostResponse(url, params);
        if (isRight(response)) {
            token = response.getJSONObject("data").getString("token");
            super.token = token;
            logger.info("账号 {} 登录成功", account);
        } else {
            output(response);
            logger.warn("账号 {} 登录失败", account);
            fail();
        }
        return token;
    }

  • 郑重声明:“FunTester”首发,欢迎关注交流,禁止第三方转载。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 业务逻辑:
  • 基本的校验规则如下:
  • 解决方案:
  • 测试方案:
  • 压测脚本:
  • 模块类方法:
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档