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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下:

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

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

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

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

在“编辑”菜单中单击“新建”、“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,精确吞吐量定时器:这个在部分场景,需要对接口的请求次数限定时有用。

   

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

  1. Jmeter压力测试笔记(6)性能调测-压力并发-模拟生产环境数据

    问题原因找到了,那就好办了. 找到阿里云技术人员,让他们强行给我们上架了一个共享代理模式的Redis. 并重新进行压力测试. 哦豁~ 开心,压力测试顺利,异常率大大降低实际为: 数据库DBA反馈,数据 ...

  2. Jmeter 压力测试笔记(2)--问题定位

    事情已经出了,是该想办法解决的时候了. 经过运维和DBA定位: 数据库读写分离中,读库延时超过了30秒,导致所有请求都压在主库.另外所有数据库都连接数都被占满,但活跃请求数量缺不多. 数据库16K的连 ...

  3. jmeter压力测试笔记- HTTP协议

    一.目标 使用jmeter进行HTTP接口压力测试: 命令行方式运行,方便在linux环境运行: 二.面临的问题 支持多环境测试(开发.测试.生产环境) 支持用户数据.线程数.循环次数等配置在运行时自 ...

  4. Jmeter 压力测试笔记(4)--分布式部署

    分布式部署:坑,大坑~ 超级坑~~~~ 在这里坑了2天,整整2天.其它略过不表下面只写经验: 在linux下,centos7系统   1主 14执行机. jmeter版本 5.2.1  所有机器在同一 ...

  5. Jmeter 压力测试笔记(1)--服务器迁移失败

    近期,公司服务器因技术架构升级等原因需要迁移,在经过开发,运维DBA,测试多部门进行联合讨论后,制定出了迁移方案.迁移前也对APP应用进行了各种测试,并没有发现问题. 凌晨2点开始迁移,5点完成迁移. ...

  6. Jmeter压力测试笔记(5)问题原因

    压测链路是jmeter=>slb=>nginx => php=>rds 报 Too Many Connections 的原因是前端同时保持了 16000 个连接,达到实例规格的 ...

  7. JMeter压力测试以文件的形式

    JMeter压力测试入门教程[图文] 1. 下载JMeter 2. 启动JMeter 3. 运行预准备 4. 运行 文章目录 Apache JMeter是Apache组织开发的基于Java的压力测试工 ...

  8. 转载:JMeter压力测试入门教程[图文]

    JMeter压力测试入门教程[图文] Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可 ...

  9. 【转】jmeter压力测试

    jmeter压力测试 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域, 是压力测试的首选软件 ...

随机推荐

  1. 双列集合Map相关面试题

    一.了解Map集合吗?Map集合都有哪些实现 HashMap HashTable LinkedHashMap TreeMap ConcurrentHashMap 二.HashMap和HashTable ...

  2. C++ 删除字符串中的数字并重新按顺序排列

    #include <stdio.h> #include <string.h> char* Find_str(char* p) { ; i < strlen(p); i++ ...

  3. css hover 动画 transition:background-color 0.2s,color 0.2s; 外层套内层,正常是 里外层 鼠标上来 外层有hover,如果就想到里层hover触发外层hover,要用外层position 定义绝对定位,内层的hover跳出外层的div,这样视觉上就是两个单独的div,进行内外层联动。

    css hover 动画 transition:background-color 0.2s,color 0.2s; 外层套内层,正常是 里外层 鼠标上来 外层有hover,如果就想到里层hover触发 ...

  4. ipadmini iOS8.4.1系统精简

    主要是删除一些系统自带的应用.语言,以及关闭不需要的进程. 精简之后运行流畅性还是能看得出有所提升的.(流畅的玩点游戏还是可行的) 文件的操作可以用Filza.iFile,也可以用爱思助手,但是爱思助 ...

  5. 洛谷P5661 公交换乘(CSP-J 2019 T2)

    传送门 题目可能排版有问题,导致出现一些乱码,具体请参考洛谷原题 题目描述 著名旅游城市 B 市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案: 在搭乘一次地铁后可以获得一张优惠 ...

  6. sql 语句系列(多表之链)[八百章之第三章]

    新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...

  7. docker系列详解<一>之docker安装

    1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 $ ...

  8. 安装SQL Server 2008R2 报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本”解决方法

    安装SQL Server 2008 R2报错“此计算机上安装了 Microsoft Visual Studio 2008 的早期版本,请在安装 SQL Server 2008 前将 VS2008 升级 ...

  9. Android 缓存的使用

    缓存基础类 import android.content.Context; import android.content.SharedPreferences; public class CachePa ...

  10. ASP.NET Core 3.x 中间件流程与路由体系

    中间件分类 ASP.NET Core 中间件的配置方法可以分为以上三种,对应的Helper方法分别是:Run(), Use(), Map(). Run(),使用Run调用中间件的时候,会直接返回一个响 ...