这两天遭遇了手机号登录相关的压测需求,算是比较棘手的。主要原因有两个,第一:之前从来没有接手过这个项目,不熟悉各种规则;第二:数据量偏大,需要开发配合协调校验规则。
traceNo
traceNo
、短信验证码、手机号请求登录接口string
类型)traceNo
必需从发送验证码接口获得phone
和模块类属性lastTraceNo
来完成参数传递/**
* 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;
}