python性能測試手機號驗證碼登錄壓測示例詳解
引言
這兩天遭遇瞭手機號登錄相關的壓測需求,算是比較棘手的。主要原因有兩個,第一:之前從來沒有接手過這個項目,不熟悉各種規則;第二:數據量偏大,需要開發配合協調校驗規則。
業務邏輯:
請求發送驗證碼接口,發送成功(已綁定的手機號,且有效的用戶狀態)可以獲取到登錄的一個參數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; }
以上就是python性能測試手機號驗證碼登錄示例詳解的詳細內容,更多關於python手機號驗證碼登錄測試的資料請關註WalkonNet其它相關文章!