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

业务逻辑:

基本的校验规则如下:

解决方案:

测试方案:

压测脚本:

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

        }
    }
}

模块类方法:

/**
 * 手机号登录
 */
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;
}

技术类文章精选

无代码文章精选


↙↙↙阅读原文可查看相关链接,并与作者交流