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ù),這次算起來比較簡(jiǎn)單。最重要的是難點(diǎn)就是要求開發(fā)配合調(diào)整配置已經(jīng)在上一期文章:手機(jī)號(hào)驗(yàn)證碼登錄性能測(cè)試中問題解決了,綁定手機(jī)號(hào)唯一的難點(diǎn)就是如何在單賬號(hào)綁定的過程中不斷切換手機(jī)號(hào),而且保證最后賬號(hào)的綁定手機(jī)號(hào)還是一開始的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開頭的,所以單個(gè)用戶的綁定手機(jī)號(hào)在149和148之間切換,149為初始狀態(tà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來完成參數(shù)傳遞
壓測(cè)腳本:
threadmark用來標(biāo)記任務(wù)的,我在模塊方法里面返回了traceNo,表示唯一用戶登錄接口請(qǐng)求操作,方便開發(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)文章
pytest實(shí)現(xiàn)多進(jìn)程與多線程運(yùn)行超好用的插件
本文主要介紹了pytest實(shí)現(xiàn)多進(jìn)程與多線程運(yùn)行超好用的插件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
對(duì)Python3之方法的覆蓋與super函數(shù)詳解
今天小編就為大家分享一篇對(duì)Python3之方法的覆蓋與super函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
深入解析NumPy中的Broadcasting廣播機(jī)制
在吳恩達(dá)老師的深度學(xué)習(xí)專項(xiàng)課程中,老師有提到NumPy中的廣播機(jī)制,同時(shí)那一周的測(cè)驗(yàn)也有涉及到廣播機(jī)制的題目。那么,到底什么是NumPy中的廣播機(jī)制?本文就來介紹一下2021-05-05
python中的 Matplotlib 繪制多子圖時(shí)的重疊問題及解決方案
當(dāng)使用 Matplotlib 繪制多個(gè)子圖(subplots)時(shí),如果標(biāo)簽或標(biāo)題文字交叉或重疊,遇到這樣的問題如何處理呢,下面小編給大家介紹了python中的 Matplotlib 繪制多子圖時(shí)的重疊問題及解決方案,需要的朋友可以參考下2024-06-06
Python的Flask框架中Flask-Admin庫(kù)的簡(jiǎn)單入門指引
這篇文章主要介紹了一個(gè)Python的Flask框架中Flask-Admin庫(kù)簡(jiǎn)單入門的指引,包括介紹和簡(jiǎn)單的部署等,需要的朋友可以參考下2015-04-04
使用OpenCV實(shí)現(xiàn)人臉圖像卡通化的示例代碼
這篇文章主要介紹了使用OpenCV實(shí)現(xiàn)人臉圖像卡通化的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
PyQt4 treewidget 選擇改變顏色,并設(shè)置可編輯的方法
今天小編就為大家分享一篇PyQt4 treewidget 選擇改變顏色,并設(shè)置可編輯的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06

