最近遭遇了綁定手機號相關的壓測需求,有了手機號登陸的經驗和測試數據,此次算起來比較簡單。最重要的是難點就是要求開發配合調整配置已經在上一期文章:手機號驗證碼登陸性能測試中問題解決了,綁定手機號惟一的難點就是如何在單帳號綁定的過程當中不斷切換手機號,並且保證最後帳號的綁定手機號仍是一開始的14+uid
的模式。編程
traceNo
traceNo
、短信驗證碼、手機號請求綁定手機號接口string
類型)traceNo
必需從發送驗證碼接口得到149
和148
之間切換,149
爲初始狀態,這裏並無使用每次換一個新手機號,第一是怕出現偶然重複,第二是數據維護不容易phone
和模塊類屬性lastTraceNo
來完成參數傳遞/** * 每一個用戶先發短信而後綁定手機號,手機號分爲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; }