目录引言业务逻辑:基本的校验规则如下:解决方案:测试方案:压测脚本:模块类方法:引言最近遭遇了绑定手机号相关的压测需求,有了手机号登录的经验和测试数据,这次算起来比较简单。最重要的是难点就是要求开发配...
目录
引言业务逻辑:
基本的校验规则如下:
解决方案:
测试方案:
压测脚本:
模块类方法:
引言
最近遭遇了绑定手机号相关的压测需求,有了手机号登录的经验和测试数据,这次算起来比较简单。最重要的是难点就是要求开发配合调整配置已经在上一期文章:手机号验证码登录性能测试中问题解决了,绑定手机号唯一的难点就是如何在单账号绑定的过程中不断切换手机号,而且保证最后账号的绑定手机号还是一开始的14+uid的模式。
业务逻辑:
请求发送验证码接口,发送成功(未绑定的手机号,用户登录状态)可以获取到登录的一个参数traceNo
使用用户登录校验令牌、traceNo、短信验证码、手机号请求绑定手机号接口
基本的校验规则如下:
手机号校验,排除一些不存在的号段,11位数字类型(接口传string类型)
间隔(60s)内不允许发第二条短信,短信有效期同隔间
自然天不允许发10条以上的短信
验证码随机和traceNo必需从发送验证码接口获得
解决方案:
限制条件已经做成可配置,可以随时更改重启服务即可
选中14号段,用户手机号=14+uid
测试环境固定验证码
uid是9开头的,所以单个用户的绑定手机号在149和148之间切换,149为初始状态,这里并没有使用每次换一javascript个新手机号,第一是怕出现偶然重复,第二是数据维护不容易
测试方案:
将发送验证码和绑定手机号两个接口放在一起压测,需要准备一批测试用户
单个线程绑定一个用户,然后不停地发送验证码和绑定新手机号
增加基类属性phone和模块类属性lastTraceNo来完成参数传递
压测脚本:
threadmark用来标记任务的,我在模块方法里面返回了traceNo,表示唯一用户登录接口请求操作,方便开发追踪日志。
/**
*每个用户先发短信然后绑定手机号,手机号分为148和149切换,后8位于uid后8位.最后会把测试数据固定在149号段
*/
classBindPhoneextendsOkayBase{
publicstaticvoidmain(String[]args){
defargsUtil=newArgsUtil(args)
defthread=argsUtil.getIntOrdefault(0,100)
deftimes=argsUtil.getIntOrdefault(1,50)
ClientManage.init(10000,5000,0)
defthreads=[]
thread.times{
defbase=getBase(it)
definfo=newUserInfo(base)
threads<<newBind(info,times)
}
newConcurrent(threads,"学生留存1.2.3绑定手机号").start()
thread.times{
defbase=getBase(it)
definfo=newUserInfo(base)
info.bindPhoneInit()
}
FanLibrary.testOver()
}
staticclassBindextendsThreadLimiphptTimesCount<UserInfo>{
publicLoginTel(UserInfoinfo,inttimes){
super(info,times,null)
}
@Override
protectedvoiddoing()throwsException{
threadmark=t.bindPhone()
}
}
}
模块类方法:
/**
*获取用户信息
*
*@return
*/
publicjsONObjectgetUserInfo(){
Stringurl=UserLnENbtInfoApi.USERINFO;
JSONObjectparams=getParams();
JSONObjectresponse=getPostResponse(url,params);
output(response);
returnresponse;
}
/**
*绑定手机号
*
*@return
*/
publicJSONObjectbindPhone(Stringphone){
sendCodeOnline(phone);
Stringurl=UserInfoApi.BIND_PHONE;
JSONObjectparams=getParams();
params.put("phone",phone);
params.put("traceno",lastTraceNo);
params.put("code",Common.TEL_CODE);
JSONObjectresponse=getPostResponse(url,params);
output(response);
returnresponse;
}
/**
*绑定手机号,压测用
*
*@return
*/
publicStringbindPhone(){
phone=phone.startsWith("149")?148+phone.substring(3):149+phone.substring(3);
bindPhone(phone);
returnlastTraceNo;
}
/**
*初始化手机号,默认id前两位改成14
*
*@return
*/
publicJSONObjectbindPhoneInit(){
JSONObjectuserInfo=getUserInfo();
Stringtel=userInfo.getJSONObject("data").getString("tel");
if(tel.startsWith("149"))returnnull;
phone=149+phone.substring(3);
sendCodeOnline(phone);
Stringurl=UserInfoApi.BIND_PHONE;
JSONObjectparams=getParams();
params.put("phone",phone);
params.put("traceno",lastTraceNo);
params.put("code",Common.TEL_CODE);
JSONObjectresponse=getPostResponse(url,params);
output(response);
returnresponse;
}
/**
*发送绑定手机号信息
*
*@paramphone
*@return
*/
publicJSONObjectsendCodeOnline(Stringphone){
Stringurl=UserInfoApi.SEND_CODE_ONLINE;
JSONObjectparams=getParams();
params.put("scene_type",1);//1绑定手机
params.put("phone",phone);
output(phone);
JSONObjectresponse=getPostResponse(url,params);
output(response);
if(isRight(response)){
lastTraceNo=response.getJSONObject("data").getString("traceno");
}
returnresponse;
}
以上就是python性能测试对手机号绑定进行压测的详细内容,更多关于python手机号绑定性能测试的资料请关注我们其它相关文章!










