python性能测试手机号验证码登录压测示例详解
作者:fun 发布时间:2021-06-05 13:21:25
标签: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;
}
来源:http://170e.cn/86t6
0
投稿
猜你喜欢
- try { int readByte = 0;  
- 概述一个状态管理工具Store:保存数据的地方,你可以把它看成一个容器,整个应用只能有一个 Store。State:包含所有数据,如果想得到
- 简介:设计稿尺寸标注与取色专用工具,适用于设计、界面开发与网页前端安装包仅700KB,全绿色独有的双模式切换可支持双屏显示器,一面设计,一面
- requests库安装和导入第一步:cmd打开命令行,使用如下命令安装requests库。pip install requests由于我的安
- 一个Javascript 的类库,用于table内容排序。使用很方便,不用每次都去调用数据库了。特别适合多表查询的排序。加上<tbod
- 首先声明,在这组里我是个绝对的菜鸟。再次声明,小爝这个菜鸟在“网页设计”这个圈里混了快1年了。 摘要:我知道我有多少底,所以我在总结我的成长
- 当变量维数加大时很难想象是怎样按不同维度求和的,高清楚一个,其他的应该就很清楚了,什么都不说了,上例子,例子一看便明白…..a=range(
- 见下面的代码:<html><head><title>精彩春风之月份查询</title><
- 在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。MySQL支持多种
- 服务端监听端口 listen()方法:net.listen({监听类型},{监听的ip和端口})(conn, err){}返回值:conn是
- 数据库优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解才行。尽管对系统或应用系统的了解不多的情况下优化效果还不错,但是如果想优化的
- python是个很好玩的东西?好吧我随口说的,反正因为各种原因(其实到底是啥我也不知道),简单的学习了下python,然后写了一个上传文件上
- 上个月,我写了一篇关于微软如何在向jQuery贡献代码的文章,也谈到了在第一批贡献的代码中的一些功能:jQuery模板和数据链接支持.今天,
- 一、题目描述题目内容:题目示例:题目解析:1 <= nums.length <= 104-107 <= nums
- 1.安装Apache 在终端中输入下面的命令就可以安装Apache了:sudo yum install httpdsudo的意思是
- 选择最实用来谈一下首先,你要慎重选择你就业的城市。这点是目前多数人都忽略的重要因素。无论你的设计思路和发展方向都要依托你所在城市来作为载体。
- 我们生活在信息繁杂的社会,尤其是在互联网时代,人们开始通过网络开始接触越来越多的信息,那么,如何获取/传递有效而准确的信息将非常重要。在网页
- DROP PRIMAY DEY用于取消主索引。注释:在MySQL较早的版本中,如果没有主索引,则DROP PRIMARY KEY会取消表中的
- 有助于效率的类型选择1、使你的数据尽可能小最基本的优化之一是使你的数据(和索引)在磁盘上(并且在内存中)占据的空间尽可能小。这能给出巨大的改
- 【原文地址】 Fixes for Common VS 2008 and .NET 3.5 Beta2 Issu