绑定手机号性能测试

绑定手机号唯一的难点就是如何在单账号绑定的过程中不断切换手机号,而且保证最后账号的绑定手机号还是一开始的 14+uid 的模式。

业务逻辑:

traceNo
traceNo

基本的校验规则如下:

string
traceNo

解决方案:

  • 限制条件已经做成可配置,可以随时更改重启服务即可
  • 选中14号段,用户手机号=14+uid
  • 测试环境固定验证码
  • uid是9开头的,所以单个用户的绑定手机号在 149 和 148 之间切换, 149
    为初始状态,这里并没有使用每次换一个新手机号,第一是怕出现偶然重复,第二是数据维护不容易

测试方案:

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

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

/**
 * 每个用户先发短信然后绑定手机号,手机号分为148和149切换,后8位于uid后8位.最后会把测试数据固定在149号段
 */
class BindPhone 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 Bind(info, times)
        }

        new Concurrent(threads, "学生留存1.2.3绑定手机号").start()

        thread.times {
            def base = getBase(it)
            def info = new UserInfo(base)
            info.bindPhoneInit()
        }
        FanLibrary.testOver()
    }

    static class Bind extends ThreadLimitTimesCount<UserInfo> {

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


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

        }
    }
}

复制代码

模块类方法:

/**
     * 获取用户信息
     *
     * @return
     */
    public JSONObject getUserInfo() {
        String url = UserInfoApi.USERINFO;
        JSONObject params = getParams();
        JSONObject response = getPostResponse(url, params);
        output(response);
        return response;
    }

    /**
     * 绑定手机号
     *
     * @return
     */
    public JSONObject bindPhone(String phone) {
        sendCodeOnline(phone);
        String url = UserInfoApi.BIND_PHONE;
        JSONObject params = getParams();
        params.put("phone", phone);
        params.put("traceno", lastTraceNo);
        params.put("code", Common.TEL_CODE);
        JSONObject response = getPostResponse(url, params);
        output(response);
        return response;
    }

    /**
     * 绑定手机号,压测用
     *
     * @return
     */
    public String bindPhone() {
        phone = phone.startsWith("149") ? 148 + phone.substring(3) : 149 + phone.substring(3);
        bindPhone(phone);
        return lastTraceNo;
    }

    /**
     * 初始化手机号,默认id前两位改成14
     *
     * @return
     */
    public JSONObject bindPhoneInit() {
        JSONObject userInfo = getUserInfo();
        String tel = userInfo.getJSONObject("data").getString("tel");
        if (tel.startsWith("149")) return null;
        phone = 149 + phone.substring(3);
        sendCodeOnline(phone);
        String url = UserInfoApi.BIND_PHONE;
        JSONObject params = getParams();
        params.put("phone", phone);
        params.put("traceno", lastTraceNo);
        params.put("code", Common.TEL_CODE);
        JSONObject response = getPostResponse(url, params);
        output(response);
        return response;
    }
    /**
     * 发送绑定手机号信息
     *
     * @param phone
     * @return
     */
    public JSONObject sendCodeOnline(String phone) {
        String url = UserInfoApi.SEND_CODE_ONLINE;
        JSONObject params = getParams();
        params.put("scene_type", 1);//1绑定手机
        params.put("phone", phone);
        output(phone);
        JSONObject response = getPostResponse(url, params);
        output(response);
        if (isRight(response)) {
            lastTraceNo = response.getJSONObject("data").getString("traceno");
        }
        return response;
    }
复制代码

加入我们,群。642830685,领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!同行一起交流,技术大牛解惑

猜你喜欢

转载自blog.csdn.net/Asaasa1/article/details/107520404
今日推荐