• Jmeter 压力测试笔记(3)--脚本调试/签名/cookie/提升吞吐量/降低异常率/提升单机并发性能


    import XXXsign.Openapi2sign;---导入jar包中的签名方法
    String str1 = "12121";		---需要被签名的字段;向开发了解需要哪些哪些字段
    String result = "";		--定义结果变量
    result = new Openapi2sign().md5Encode(str1);  ---调用签名的方法对签名字段进行签名
    System.out.println(result);	---输出签名后的字段
    vars.put("sign",result.toString());  ----设置全局遍历sign的值为签名后的值。需要对签名结果进行
    

      

      在编写好基础脚本,以及请求参数后,开始进行调试脚本:遇到了第一个问题:

      请求签名校验失败:

      通过各种上网查找资料:终于搞定:步骤如下:

        1,向开发了解前端签名规则,算法,获取前端签名XXXsign.jar 包。

        2,将该包加入 Jmeter/lib目录下。

        3,由于每个http请求生成的签名都不一样,所以需要在每个需要签名的http请求中添加 前置处理器--》BeanShell 取样器,和调试取样器(调试用,正式跑脚本时删除)。

        4,编写脚本,生成签名,并设置签名变量,在http请求头配置元件中调用

    import XXXsign.Openapi2sign;    ---导入jar包中的签名方法
    String str1 = "12121";		  ---需要被签名的字段;向开发了解需要哪些哪些字段
    String token = ""          ----签名定义的token
    String time = ${__time(/1000)} ----签名需要的时间参数
    String str00 = token + time + str1 ---拼接成最终的签名字段 String result = "";   --定义结果变量 result = new Openapi2sign().md5Encode(str00);   ---调用签名的方法对签名字段进行签名 System.out.println(result);     ---输出签名后的字段,正式执行时,注释这行 vars.put("sign",result.toString()); ----设置全局遍历sign的值为签名后的值。需要对签名结果进行

      

     5,调试好的脚本,在调试取样器的结果和请求的header中都可以看到请求的签名字符串

     

     

    ================================================

      调试好签名以后:遇到第二个cookie校验失败。

        当需要执行大批量用户并发业务测试时,不适合使用登录接口获取登录态。再更新cookie

      我使用的办法是,找开发奖cookie 生成规则固定。好用于进行接口测试。

      cookie固定的规则是:

        sid=用户ID+‘sid’,uid=用户ID,device_id=test(固定为test)

      找DBA将该规则写入Redis。

      在Jmeter 线程组中添加cookie管理器:

      在cookie管理器中:设置固定的cookie格式。 userid从csv数据文件中传输。用来模拟多用户请求业务场景。

      

      经过测试:ok

    ======================================================

      提升吞吐量:

      脚本调试在windows 10 上进行。测试时,发现吞吐量总是上不去,且异常率特别高55%

      上网一阵猛搜索~ 感觉自己是个工具人。哈哈~

      

      首先根据自己电脑内存,加大了jvm内存,一口气直接加到4G,开心~

      并且进行了如下配置:

       修改注册表: 提升TCP连接端口,减少tcp回收时间:

        Windows 提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。

    解决办法如下:

    cmd中,用regedit命令打开注册表

    第一步:增加动态分配到客户端 TCP/IP 套接字连接的临时端口的上限。

    在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下:

    右击parameters,添加一个新的DWORD,名字为MaxUserPort

    然后双击MaxUserPort,输入数值数据为65534,基数选择十进制

    第二步:降低客户端 TCP/IP 套接字连接的超时值(默认值为 240 秒)

    在注册表中,浏览到并单击以下注册表项。

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

    在“编辑”菜单中单击“新建”、“DWORD 值”,然后添加以下注册表值,以缩短关闭连接时,该连接处于 TIME_WAIT 状态的时间。当连接处于 TIME_WAIT 状态时,套接字对无法重新使用:

    右击parameters,添加一个新的DWORD,名字为TcpTimedWaitDelay

    然后双击TcpTimedWaitDelay,输入数值数据为一个 30 到 240 之间的数字,基数选择十进制--设置30秒

    重启电脑

    完成以上步骤后,吞吐量大大上升,异常率大大降低。

    ====================================

    提升单机并发性能

      经过提升内存和tcp连接数、以及修改tcp连接时间后。机器的性能已经被我们压榨的差不多了。现在我们要调试的我们的脚本。

       1,线程数:每个线程数都占用一定的内存(我自己测试3到4M:猜的),线程数不要超过给定的jvm内存,否则会卡,会慢。吞吐量下降,异常率提升。并发量下降,连接数下降等等。

       2,预热时间:我一般设置为30秒。实际线程设置比较多时,大于500,30秒并不能完全启动。建议大家按500线程数30秒的时间来设置。

       3,响应,断言,查看结果树,这些东西都关掉。

       4,精确吞吐量定时器:这个在部分场景,需要对接口的请求次数限定时有用。

       

  • 相关阅读:
    Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
    Mybaits 源码解析 (十一)----- @MapperScan将Mapper接口生成代理注入到Spring-静态代理和动态代理结合使用
    Mybaits 源码解析 (十)----- Spring-Mybatis框架使用与源码解析
    Mybaits 源码解析 (九)----- 一级缓存和二级缓存源码分析
    Mybaits 源码解析 (八)----- 结果集 ResultSet 自动映射成实体类对象(上篇)
    Mybaits 源码解析 (七)----- Select 语句的执行过程分析(下篇)
    Mybaits 源码解析 (六)----- Select 语句的执行过程分析(上篇)
    Mybaits 源码解析 (五)----- Mapper接口底层原理(为什么Mapper不用写实现类就能访问到数据库?)
    Mybaits 源码解析 (四)----- SqlSession的创建过程
    Mybaits 源码解析 (三)----- Mapper映射的解析过程
  • 原文地址:https://www.cnblogs.com/Yanqiqi/p/12672540.html
Copyright © 2020-2023  润新知