python性能测试对手机号绑定进行压测

作者:FunTester 时间:2021-09-29 12:17:00 

引言

最近遭遇了绑定手机号相关的压测需求,有了手机号登录的经验和测试数据,这次算起来比较简单。最重要的是难点就是要求开发配合调整配置已经在上一期文章:手机号验证码登录性能测试中问题解决了,绑定手机号唯一的难点就是如何在单账号绑定的过程中不断切换手机号,而且保证最后账号的绑定手机号还是一开始的14+uid的模式。

业务逻辑:

请求发送验证码接口,发送成功(未绑定的手机号,用户登录状态)可以获取到登录的一个参数traceNo

使用用户登录校验令牌、traceNo、短信验证码、手机号请求绑定手机号接口

基本的校验规则如下:

手机号校验,排除一些不存在的号段,11位数字类型(接口传string类型)

间隔(60s)内不允许发第二条短信,短信有效期同隔间

自然天不允许发10条以上的短信

验证码随机和traceNo必需从发送验证码接口获得

解决方案:

限制条件已经做成可配置,可以随时更改重启服务即可

选中14号段,用户手机号=14+uid

测试环境固定验证码

uid是9开头的,所以单个用户的绑定手机号在149148之间切换,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<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;
    }
    /**
     * 绑定手机号
     *
     * @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;
    }

来源:104.116.116.112.58.47.47.49.53.56.114.46.99.110.47.56.54.116.57.

标签:python,手机号绑定,性能测试
0
投稿

猜你喜欢

  • php中替换字符串函数strtr()和str_repalce()的用法与区别

    2023-11-17 06:12:53
  • 大幅优化MySQL查询性能的奇技淫巧

    2024-01-27 15:32:52
  • python实现文本文件合并

    2022-01-06 04:30:27
  • python中读入二维csv格式的表格方法详解(以元组/列表形式表示)

    2023-04-19 06:39:39
  • PHP ob缓存以及ob函数原理实例解析

    2023-11-18 17:36:14
  • Python中断言Assertion的一些改进方案

    2023-03-05 15:07:57
  • 提高MYSQL查询效率的三个有效的尝试

    2009-02-27 16:08:00
  • Pycharm安装第三方库失败解决方案

    2021-10-09 07:01:39
  • Python2与Python3的区别点整理

    2022-02-23 07:44:46
  • IE bug: 1像素的dotted/dashed边框

    2009-10-28 18:45:00
  • 解决安装mysqlclient的时候出现Microsoft Visual C++ 14.0 is required报错

    2024-01-14 15:48:14
  • MSSQL数据库获取TEXT字段的内容长度

    2024-01-24 12:50:54
  • Notice: Undefined index: page in E:\\PHP\\test.php on line 14

    2023-10-27 20:04:46
  • python删除文件夹下相同文件和无法打开的图片

    2023-03-09 19:26:42
  • 基于laravel缓冲cache的用法详解

    2024-05-11 10:07:55
  • pycharm无法安装cv2模块问题及解决方案

    2023-02-14 21:20:49
  • Vue项目中配置pug解析支持

    2024-05-09 09:52:53
  • 三表左连接查询的sql语句写法

    2024-01-15 01:54:21
  • python中执行shell的两种方法总结

    2023-03-12 15:20:39
  • Python中的 ansible 动态Inventory 脚本

    2022-10-23 07:53:08
  • asp之家 网络编程 m.aspxhome.com