綁定手機號性能測試

最近遭遇了綁定手機號相關的壓測需求,有了手機號登陸的經驗和測試數據,此次算起來比較簡單。最重要的是難點就是要求開發配合調整配置已經在上一期文章:手機號驗證碼登陸性能測試中問題解決了,綁定手機號惟一的難點就是如何在單帳號綁定的過程當中不斷切換手機號,並且保證最後帳號的綁定手機號仍是一開始的14+uid的模式。編程

業務邏輯:

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

基本的校驗規則以下:

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

解決方案:

  • 限制條件已經作成可配置,能夠隨時更改重啓服務便可
  • 選中14號段,用戶手機號=14+uid
  • 測試環境固定驗證碼
  • uid是9開頭的,因此單個用戶的綁定手機號在149148之間切換,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;
    }

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

技術類文章精選

無代碼文章精選

相關文章
相關標籤/搜索