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

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

原创
作者头像
FunTester
修改2020-04-15 10:35:34
5K0
修改2020-04-15 10:35:34
举报
文章被收录于专栏:FunTester

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

业务逻辑:

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

* 使用traceNo、短信验证码、手机号请求登录接口

基本的校验规则如下:

* 手机号校验,排除一些不存在的号段,11位数字类型(接口传string类型)

* 间隔(60s)内不允许发第二条短信,短信有效期同隔间

* 自然天不允许发10条以上的短信

* 验证码随机和traceNo必需从发送验证码接口获得

解决方案:

* 限制条件已经做成可配置,可以随时更改重启服务即可

* 选中14号段,用户手机号=14+uid

* 测试环境固定验证码

测试方案:

* 将发送验证码和短信登录两个接口放在一起压测,需要准备一批测试用户

* 单个线程绑定一个用户,然后不停地发送验证码和使用验证码登录

* 增加基类属性phone和模块类属性lastTraceNo来完成参数传递

压测脚本:

* threadmark用来标记任务的,我在模块方法里面返回了token,表示唯一用户登录接口请求操作,方便开发追踪日志。

代码语言:txt
复制
/\*\*

 \* 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()



        }

    }

}

模块类方法:

代码语言:txt
复制
    /\*\*

     \* 手机号登录

     \*/

    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”首发,欢迎关注交流,禁止第三方转载。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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