基于Jmeter的压力测试
压力测试步骤
1.确定压测需求目标,多少算合理
PS:通过和开发业务咨询,确定目标的并发数、TPS和响应时间
概念定义:
并发数:系统同时处理的事务数
TPS:每秒钟处理事务数
响应时间:一般取平均响应时间
TPS = 并发数/响应时间
2.编写jmeter脚本,调通接口,看接口是否能正常运行;
3.根据压测目标数,不断增加压力峰值,找到性能拐点,通常是通过系统吞吐量(TPS)来控制。
在不断增加压力下,到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,此时最高点就是性能测试的拐点
4.在拐点处进行压测5min,查看数据库和服务器应用的性能情况
应用服务器:通过top(监控CPU),free(监控内存),iostat(监控磁盘swap),还有综合工具vmstat,超级监控工具dstat
数据库监控:通过配置数据库文件,开启慢日志查询,监控数据库CPU,内存,磁盘的IO等
软件安装过程在此省略,请自行百度
组件说明
测试计划
整个测试依赖一个测试计划,相当于一个项目,里边可以包含多个以下组件
线程组
a.Number of Threads(users) :线程数,一个线程相当于一个虚拟用户
b.Ramp-Up Period(in second):线程启动开始运行的时间间隔,单位秒。即所有线程在多长时间内全部启动。例如线程60个,Ramp-Up Period设置为20s,那么每秒启动60/20=3个线程,不填写默认设置为0,即所有线程在开启场景后立即启动。
c.Loop Count:循环次数。勾选forever,将一直执行,除非手动停止或崩溃
d.Delay Thread creation until needed:延时创建线程直到该线程需要采样时。
勾选,例如50个线程Ramp-Up Period为10s,那么每隔1s启动50/10=5个线程并运行下面的请求(状态为running);不勾选,测试计划开始后启动所有线程(状态为new),但是不立即执行下面的请求。例如50个线程Ramp-Up Period为10s,那么计划开始后所有线程全部就绪,但第一秒只有5个线程开始运行请求。实际应用中选择哪种都可以,不影响测试结果。
个人理解:例如银行办业务10个人,勾选,柜台只有一个人在办理(running状态),剩下的人可以坐在位置上等候;不勾选,10个人都站在柜台外面排队等候(不是坐着),等待叫号。
取样器
各种不同的事件触发器,比如http请求 mqtt连接
监听器
用的较多的内容介绍如下
聚合报告
- Label:请求的名称,就是我们在进行测试的httprequest sampler的名称
- Samples:总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次;
- Average:默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 ,单位是毫秒
- Median: 50%用户的请求的响应时间,中位数
- 90%Line:90%的请求的响应时间
- 95%Line:95%的请求的响应时间
- 99%Line:99%的请求的响应时间
- Min:最小的响应时间
- Max:最大的响应时间
- Error%:错误率=错误的请求的数量/请求的总数
- Throughput: 默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
- KB/sec: 每秒从服务器端接收到的数据量
查看结果树
用表格查看结果
逻辑控制器
类似编程语言中的逻辑判断
- 循环控制器
- 事务控制器
断言
预期的结果
配置元件
配置该测试计划的各种配置信息
前置、后置处理器
在请求前后做的事情
定时器
参数
函数助手
csv data
命令行
jmeter -g test.jtl -o /path
# -g:后跟test.jtl文件所在的路径
# -o:后跟生成的HTML文件存放的路径
jmeter -n -t ezCloud.jmx -l ezCloud.jtl -e -o d:\ezCloud
# -n:以非GUI形式运行Jmeter
# -t:source.jmx 脚本路径
# -l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在
# -e:在脚本运行结束后生成html报告
# -o:用于存放html报告的目录
示例
1.编写测试计划
2.录制测试脚本
- badboy
- jmeter自带的代理
- fiddler或者wireshark抓包软件
3.添加线程组,添加取样器,增加监听器
3.执行测试
4.监控结果生成测试报告
Tips
jemter每次的测试结果是累加的 所以可以点击全部清除 清除掉上一次的测试结果
QA
语言切换
方法1
依次点击Options-->Choose Language-->Chinese(Simplified)即可配置成中文简体,需注意的是该方法只对当次生效,下次打开Jmeter依然是英文。如需永久生效,请使用下面两种方法。
方法2
——修改jmeter.properties文件
打开jmeter解压缩文件下的bin目录,找到jmeter.properties文件并用编辑器打开,
在#language=en下面插入一行language=zh_CN,修改后保存
重新启动Jmeter界面显示为中文简体
方法3
——修改jmeter.bat文件
使用编辑器打开JMeter启动文件jmeter.bat
将set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"修改成set JMETER_LANGUAGE=-Duser.language="zh" -Duser.region="CN",保存代码
重新启动Jmeter界面显示为中文简体