首頁 > 軟體

python效能測試對手機號繫結進行壓測

2022-07-21 18:02:50

引言

最近遭遇了繫結手機號相關的壓測需求,有了手機號登入的經驗和測試資料,這次算起來比較簡單。最重要的是難點就是要求開發配合調整設定已經在上一期文章:手機號驗證碼登入效能測試中問題解決了,繫結手機號唯一的難點就是如何在單賬號繫結的過程中不斷切換手機號,而且保證最後賬號的繫結手機號還是一開始的14+uid的模式。

業務邏輯:

請求傳送驗證碼介面,傳送成功(未繫結的手機號,使用者登入狀態)可以獲取到登入的一個引數traceNo

使用使用者登入校驗令牌、traceNo、簡訊驗證碼、手機號請求繫結手機號介面

基本的校驗規則如下:

手機號校驗,排除一些不存在的號段,11位數位型別(介面傳string型別)

間隔(60s)內不允許發第二條簡訊,簡訊有效期同隔間

自然天不允許發10條以上的簡訊

驗證碼隨機和traceNo必需從傳送驗證碼介面獲得

解決方案:

限制條件已經做成可設定,可以隨時更改重啟服務即可

選中14號段,使用者手機號=14+uid

測試環境固定驗證碼

uid是9開頭的,所以單個使用者的繫結手機號在149148之間切換,149為初始狀態,這裡並沒有使用每次換一個新手機號,第一是怕出現偶然重複,第二是資料維護不容易

測試方案:

將傳送驗證碼和繫結手機號兩個介面放在一起壓測,需要準備一批測試使用者

單個執行緒繫結一個使用者,然後不停地傳送驗證碼和繫結新手機號

增加基礎類別屬性phone和模組類屬性lastTraceNo來完成引數傳遞

壓測指令碼:

threadmark用來標記任務的,我在模組方法裡面返回了traceNo,表示唯一使用者登入介面請求操作,方便開發追蹤紀錄檔。

/**
 * 每個使用者先傳簡訊然後繫結手機號,手機號分為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;
    }

以上就是python效能測試對手機號繫結進行壓測的詳細內容,更多關於python手機號繫結效能測試的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com