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_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/提升吞吐量/降低异常率/提升单机并发性能的更多相关文章
- Jmeter压力测试笔记(6)性能调测-压力并发-模拟生产环境数据
问题原因找到了,那就好办了. 找到阿里云技术人员,让他们强行给我们上架了一个共享代理模式的Redis. 并重新进行压力测试. 哦豁~ 开心,压力测试顺利,异常率大大降低实际为: 数据库DBA反馈,数据 ...
- Jmeter 压力测试笔记(2)--问题定位
事情已经出了,是该想办法解决的时候了. 经过运维和DBA定位: 数据库读写分离中,读库延时超过了30秒,导致所有请求都压在主库.另外所有数据库都连接数都被占满,但活跃请求数量缺不多. 数据库16K的连 ...
- jmeter压力测试笔记- HTTP协议
一.目标 使用jmeter进行HTTP接口压力测试: 命令行方式运行,方便在linux环境运行: 二.面临的问题 支持多环境测试(开发.测试.生产环境) 支持用户数据.线程数.循环次数等配置在运行时自 ...
- Jmeter 压力测试笔记(4)--分布式部署
分布式部署:坑,大坑~ 超级坑~~~~ 在这里坑了2天,整整2天.其它略过不表下面只写经验: 在linux下,centos7系统 1主 14执行机. jmeter版本 5.2.1 所有机器在同一 ...
- Jmeter 压力测试笔记(1)--服务器迁移失败
近期,公司服务器因技术架构升级等原因需要迁移,在经过开发,运维DBA,测试多部门进行联合讨论后,制定出了迁移方案.迁移前也对APP应用进行了各种测试,并没有发现问题. 凌晨2点开始迁移,5点完成迁移. ...
- Jmeter压力测试笔记(5)问题原因
压测链路是jmeter=>slb=>nginx => php=>rds 报 Too Many Connections 的原因是前端同时保持了 16000 个连接,达到实例规格的 ...
- JMeter压力测试以文件的形式
JMeter压力测试入门教程[图文] 1. 下载JMeter 2. 启动JMeter 3. 运行预准备 4. 运行 文章目录 Apache JMeter是Apache组织开发的基于Java的压力测试工 ...
- 转载:JMeter压力测试入门教程[图文]
JMeter压力测试入门教程[图文] Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可 ...
- 【转】jmeter压力测试
jmeter压力测试 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域, 是压力测试的首选软件 ...
随机推荐
- 浅谈静态布局、流式布局,rem布局,弹性布局、响应式布局
静态布局: 特点:没有兼容性问题 PC:居中布局,所有样式使用绝对宽度/高度(px),设计一个Layout,在屏幕宽高有调整时,使用横向和竖向的滚动条来查阅被遮掩部分:移动设备:另外建立移动网站,单独 ...
- Drf(DjangoRestFramewok)
第一部分 问题 1.前后端分离? vue.js 后端给前段返回json数据 2.移动端盛行. app 后端给app返回json数据 3.PC端应用? crm项目,前段后端一起写,运行在浏览器上. 一般 ...
- 新手学黑客攻防-黑客攻击电脑方式和认识IP地址
听说过黑客,没见过黑客,从最基础的开始学习,让我能在互联网中保护自己的隐私安全和信息安全. 黑客攻击电脑方式 黑客攻击的方式多种多样,但常见的只有以下几种,基本上每个黑客都会用到: 网络报文嗅探 网络 ...
- 部署nginx后无法访问数据库,查看www-error.log日志报错Class 'mysqli' not found in /usr/local/nginx/html/mysql.php on line 2
检查你的php-mysql包是否安装 [root@localhost nginx]# rpm -qa php-mysql 没有任何输出则没有安装,接下来用yum安装php-mysql yum -y i ...
- Object.keys()方法
一.定义和用法 返回对象的可枚举属性和方法的名称.二.参数 obj:要返回器枚举自身属性的对象.三.返回值 返回一个所有元素为字符串的数组,其元素来自于从给定的obj里可直接枚举的属性.这些属性的顺序 ...
- 【分布式锁】01-使用Redisson实现可重入分布式锁原理
前言 主流的分布式锁一般有三种实现方式: 数据库乐观锁 基于Redis的分布式锁 基于ZooKeeper的分布式锁 之前我在博客上写过关于mysql和redis实现分布式锁的具体方案:https:// ...
- Redis详解(一)
redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多 包括string(字符串).list(链表).set(集合).zset(sor ...
- 深度学习归一化:BN、GN与FRN
在深度学习中,使用归一化层成为了很多网络的标配.最近,研究了不同的归一化层,如BN,GN和FRN.接下来,介绍一下这三种归一化算法. BN层 BN层是由谷歌提出的,其相关论文为<Batch No ...
- [CVPR 2019]Normalized Object Coordinate Space for Category-Level 6D Object Pose and Size Estimation
论文地址:https://arxiv.org/abs/1901.02970 github链接:https://github.com/hughw19/NOCS_CVPR2019 类别级6D物体位姿 ...
- [阿里云-机器学习PAI快速入门与业务实战 ]课时1-机器学习背景知识以及业务架构介绍
什么是机器学习? 机器学习指的是机器通过统计学算法,对大量的历史数据进行学习从而生成经验模型,利用经验模型指导业务. 目前机器学习主要在一下一些方面发挥作用: 营销类场景:商品推荐.用户群体画像.广告 ...