手機號驗證碼登陸性能測試

這兩天遭遇了手機號登陸相關的壓測需求,算是比較棘手的。主要緣由有兩個,第一:以前歷來沒有接手過這個項目,不熟悉各類規則;第二:數據量偏大,須要開發配合協調校驗規則。編程

業務邏輯:

  • 請求發送驗證碼接口,發送成功(已綁定的手機號,且有效的用戶狀態)能夠獲取到登陸的一個參數traceNo
  • 使用traceNo、短信驗證碼、手機號請求登陸接口

基本的校驗規則以下:

  • 手機號校驗,排除一些不存在的號段,11位數字類型(接口傳string類型)
  • 間隔(60s)內不容許發第二條短信,短信有效期同隔間
  • 天然天不容許發10條以上的短信
  • 驗證碼隨機和traceNo必需從發送驗證碼接口得到

解決方案:

  • 限制條件已經作成可配置,能夠隨時更改重啓服務便可
  • 選中14號段,用戶手機號=14+uid
  • 測試環境固定驗證碼

測試方案:

  • 將發送驗證碼和短信登陸兩個接口放在一塊兒壓測,須要準備一批測試用戶
  • 單個線程綁定一個用戶,而後不停地發送驗證碼和使用驗證碼登陸
  • 增長基類屬性phone和模塊類屬性lastTraceNo來完成參數傳遞

壓測腳本:

  • threadmark用來標記任務的,我在模塊方法裏面返回了token,表示惟一用戶登陸接口請求操做,方便開發追蹤日誌。
/**
 * 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;
    }

  • 鄭重聲明:「FunTester」首發,歡迎關注交流,禁止第三方轉載。

技術類文章精選

無代碼文章精選

相關文章
相關標籤/搜索