python性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)
引言
最近遭遇了綁定手機(jī)號(hào)相關(guān)的壓測(cè)需求,有了手機(jī)號(hào)登錄的經(jīng)驗(yàn)和測(cè)試數(shù)據(jù),這次算起來(lái)比較簡(jiǎn)單。最重要的是難點(diǎn)就是要求開(kāi)發(fā)配合調(diào)整配置已經(jīng)在上一期文章:手機(jī)號(hào)驗(yàn)證碼登錄性能測(cè)試中問(wèn)題解決了,綁定手機(jī)號(hào)唯一的難點(diǎn)就是如何在單賬號(hào)綁定的過(guò)程中不斷切換手機(jī)號(hào),而且保證最后賬號(hào)的綁定手機(jī)號(hào)還是一開(kāi)始的14+uid
的模式。
業(yè)務(wù)邏輯:
請(qǐng)求發(fā)送驗(yàn)證碼接口,發(fā)送成功(未綁定的手機(jī)號(hào),用戶登錄狀態(tài))可以獲取到登錄的一個(gè)參數(shù)traceNo
使用用戶登錄校驗(yàn)令牌、traceNo
、短信驗(yàn)證碼、手機(jī)號(hào)請(qǐng)求綁定手機(jī)號(hào)接口
基本的校驗(yàn)規(guī)則如下:
手機(jī)號(hào)校驗(yàn),排除一些不存在的號(hào)段,11位數(shù)字類型(接口傳string
類型)
間隔(60s)內(nèi)不允許發(fā)第二條短信,短信有效期同隔間
自然天不允許發(fā)10條以上的短信
驗(yàn)證碼隨機(jī)和traceNo
必需從發(fā)送驗(yàn)證碼接口獲得
解決方案:
限制條件已經(jīng)做成可配置,可以隨時(shí)更改重啟服務(wù)即可
選中14號(hào)段,用戶手機(jī)號(hào)=14+uid
測(cè)試環(huán)境固定驗(yàn)證碼
uid是9開(kāi)頭的,所以單個(gè)用戶的綁定手機(jī)號(hào)在149
和148
之間切換,149
為初始狀態(tài),這里并沒(méi)有使用每次換一個(gè)新手機(jī)號(hào),第一是怕出現(xiàn)偶然重復(fù),第二是數(shù)據(jù)維護(hù)不容易
測(cè)試方案:
將發(fā)送驗(yàn)證碼和綁定手機(jī)號(hào)兩個(gè)接口放在一起壓測(cè),需要準(zhǔn)備一批測(cè)試用戶
單個(gè)線程綁定一個(gè)用戶,然后不停地發(fā)送驗(yàn)證碼和綁定新手機(jī)號(hào)
增加基類屬性phone
和模塊類屬性lastTraceNo
來(lái)完成參數(shù)傳遞
壓測(cè)腳本:
threadmark用來(lái)標(biāo)記任務(wù)的,我在模塊方法里面返回了traceNo,表示唯一用戶登錄接口請(qǐng)求操作,方便開(kāi)發(fā)追蹤日志。
/** ?*?每個(gè)用戶先發(fā)短信然后綁定手機(jī)號(hào),手機(jī)號(hào)分為148和149切換,后8位于uid后8位.最后會(huì)把測(cè)試數(shù)據(jù)固定在149號(hào)段 ?*/ 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,?"學(xué)生留存1.2.3綁定手機(jī)號(hào)").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; ????} ????/** ?????*?綁定手機(jī)號(hào) ?????* ?????*?@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; ????} ????/** ?????*?綁定手機(jī)號(hào),壓測(cè)用 ?????* ?????*?@return ?????*/ ????public?String?bindPhone()?{ ????????phone?=?phone.startsWith("149")???148?+?phone.substring(3)?:?149?+?phone.substring(3); ????????bindPhone(phone); ????????return?lastTraceNo; ????} ????/** ?????*?初始化手機(jī)號(hào),默認(rèn)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; ????} ????/** ?????*?發(fā)送綁定手機(jī)號(hào)信息 ?????* ?????*?@param?phone ?????*?@return ?????*/ ????public?JSONObject?sendCodeOnline(String?phone)?{ ????????String?url?=?UserInfoApi.SEND_CODE_ONLINE; ????????JSONObject?params?=?getParams(); ????????params.put("scene_type",?1);//1綁定手機(jī) ????????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性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)的詳細(xì)內(nèi)容,更多關(guān)于python手機(jī)號(hào)綁定性能測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
1行Python代碼實(shí)現(xiàn)去除圖片水印詳解
這篇文章主要為大家介紹了1行Python代碼實(shí)現(xiàn)去除圖片水印詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Python?代碼智能感知類型標(biāo)注與特殊注釋詳解
這篇文章主要為大家介紹了Python?代碼智能感知類型標(biāo)注與特殊注釋詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Pytorch在dataloader類中設(shè)置shuffle的隨機(jī)數(shù)種子方式
今天小編就為大家分享一篇Pytorch在dataloader類中設(shè)置shuffle的隨機(jī)數(shù)種子方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01Python+Tkinter實(shí)現(xiàn)經(jīng)典井字棋小游戲
Tkinter是內(nèi)置到Python安裝包中的,只要安裝好Python之后就能import?Tkinter,而且IDLE也是用Tkinter編寫而成的。本文將用Tkinter編寫經(jīng)典的井字棋小游戲,需要的可以參考一下2022-03-03Python?PaddleGAN實(shí)現(xiàn)調(diào)整照片人物年齡
這篇文章主要介紹了通過(guò)PaddleGAN實(shí)現(xiàn)照片人物的老年化和年輕化處理,文中的示例代碼講解有效,對(duì)我們學(xué)習(xí)或工作有一定的幫助,感興趣的可以學(xué)習(xí)一下2021-12-12