观焦点:python性能测试对手机号绑定进行压测
目录
引言业务逻辑:基本的校验规则如下:解决方案:测试方案:压测脚本:模块类方法:引言
最近遭遇了绑定手机号相关的压测需求,有了手机号登录的经验和测试数据,这次算起来比较简单。最重要的是难点就是要求开发配合调整配置已经在上一期文章:手机号验证码登录性能测试中问题解决了,绑定手机号唯一的难点就是如何在单账号绑定的过程中不断切换手机号,而且保证最后账号的绑定手机号还是一开始的14+uid
的模式。
业务逻辑:
请求发送验证码接口,发送成功(未绑定的手机号,用户登录状态)可以获取到登录的一个参数traceNo
使用用户登录校验令牌、traceNo
、短信验证码、手机号请求绑定手机号接口
(资料图)
基本的校验规则如下:
手机号校验,排除一些不存在的号段,11位数字类型(接口传string
类型)
间隔(60s)内不允许发第二条短信,短信有效期同隔间
自然天不允许发10条以上的短信
验证码随机和traceNo
必需从发送验证码接口获得
解决方案:
限制条件已经做成可配置,可以随时更改重启服务即可
选中14号段,用户手机号=14+uid
测试环境固定验证码
uid是9开头的,所以单个用户的绑定手机号在149
和148
之间切换,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{ 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手机号绑定性能测试的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 1转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 2充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 3好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 4名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 5亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 6京东绿色建材线上平台上线 新增用户70%来自下沉市场
- 7网红淘品牌“七格格”chuu在北京又开一家店 潮人新宠chuu能红多久
- 8市场竞争加剧,有车企因经营不善出现破产、退网、退市
- 9北京市市场监管局为企业纾困减负保护经济韧性
- 10市场监管总局发布限制商品过度包装标准和第1号修改单