性能测试(3) Jmeter
1、JMeter执行原理
监控的原理:
1、收集数据(数据源:InfluxDB prometheus)
2、在Grafana的平台展示数据
JMerer通过线程组来驱动多个(也可以理解为LR⼯具⾥⾯的虚拟⽤户)运⾏测试脚本对目标服务器发起大量的网络请求,在每个客户端上可以运行多个线程组,也就是说一个测试计划⾥⾯可以包含N个线程组。
所有的互联网产品都是发送HTTP的请求。
如向百度发送请求:


2、线程属性
2.1线程数
⼀个线程可以理解为对应模拟⼀个⽤户,所以线程数越多,那么也就认为可以模拟的用户数越多。
2.2Ramp-Up时间(秒)
该属性指的是所有线程从启动到开始运行的时间间隔,单位是秒,也就是说所有线程在多少时间内开始执行,如线程数设置50,设置的时间为5秒,那么计算的公式为:
每秒执行线程数=线程数/Ramp-Up
具体如: 如设置的线程数为50,Ramp-up的时间为10,那么也就是说开启执行后,每秒会启动5个线程,如果Ramp-Up设置为0,那么开始执行后,50个线程会立刻启动。
例: 一万个用户,每秒并发2000,那么就是:

2.3调度器:
持续时间:指的是所有的任务执行完成后,任务再接着执行N秒,目的是验证被测服务的稳定性。
启动延迟:等待把所有被执行的任务集合中一起来瞬间来执行。(如上图,一秒执行2个线程,如果延迟5秒,就相当于集合了10个线程 一起来执行)

压测方式有2种。
一种是设置线程组和循环次数,这样可以设置一个样本总数,完成固定次数的请求后结束。 比如我线程组设置5,循环次数为10,那么总样本数就是5*10=50
通过控制总的请求次数,我们没法控制结束时间,有时候领导要求压测10分钟或者半小时,怎么办?
第二种压测方式,使用调度器设置持续时间,控制压测的时间(样本数不是固定的)
-
勾选永远
-
勾选调度器
-
持续时间设置(单位秒)
2.4循环次数
理解为请求的重复次数。如下图,线程数是4,循环次数是2,那么就会发送8个请求。

3、查看结果
是在监听器中,它的组件具体如下:
3.1察看结果树:查看发送网络请求后返回的信息
3.2响应时间图:发送N次请求过程中响应时间的趋势图

3.3聚合报告:里面可以看到吞吐量,最小响应时间,最大响应时间,平均响应时间 ,中位数,90,95,99

Label:取样器名称
Samples:取样器运⾏次数
Average:单个请求的平均响应时间
Median:50%请求的响应时间
90%Line:90%请求响应时间
95%Line:95%请求响应时间
99%Line:99%请求的响应时间
Min:请求的最⼩响应时间
Max:请求的最⼤响应时间
Std.Dev:响应时间的标准⽅差
Error%:事务错误率
Throughput:吞吐率,也就是TPS
KB/sec:每秒数据包流量
Avg.Bytes:平均数据流量
Received KB/sec:每秒从服务器端接收到的数据量
SentKB/sec:每秒从客户端发送的请求的数量
3.4 汇总报告:和聚合报告基本一致,差别是比聚合报告多了一项标准偏差

3.5 生成概要结果:
4、性能测试注意事项:
1、客户端本身的资源也是有限的,到具体一定的值,就不能再扩大每秒并发用户数了 。这个时候使用分布式的技术来实现。
2、测试环境和生产环境的配置要一致
5、监控系统资源
5.1PerfMon插件 展示服务器监控资源
之前在学习jmeter时,已经安装了插件管理器 Plugins Manager(见接口测试),这里,我们在插件管理器中搜索想要安装的插件PerfMon (监听被测系统资源)
(1)选择插件管理


5.2 ServerAgent
(1)下载ServerAgent后解压,与jmeter放在同一目录下(不是jmeter下):

(2)启动ServerAgent:(Windows启动是bat。mac和linux是sh,mac和linux启动前要增加权限)
(3)启动成功后:

进行监测:
设置线程组和时间,这里是设置500个线程 时间为20秒,也就是25个每秒:

通过运行这个线程组,在PerfMon插件中显示出来监控服务器资源的结果:(端口是默认的 4444,写监听的服务器的ip地址)

可以选择添加cpu 内存、磁盘和网络:

原理:jmeter执行性能测试,添加后端监听器 选择第三个influxDB(时序数据库)收集性能测试数据,influxDB收集的数据,最后通过grafana可视化展示性能测试的数据,如下图:

(1)在使用grafana之前,先要下载和部署grafana.
(2)登录Grafana,在浏览器输入http://Grafana_IP:3000
在jmeter中,添加后端监视器:

搭建好Grafana环境后,在后端监听器中“后端监听器实现”选择第三个监听器,修改infiuxdbUrl,将host_to_change修改为Grafana的地址(如下图所示)。这时jmeter中发送请求 ,通过监听器,收集数据到influxdb ,在Grafana中展示收集到的数据。

如果是多人使用Grafana,在上图中,application的值改为自己的名字,访问Grafana面板,选择application中自己的信息,就能看到自己执行的请求的资源:
http://47.95.142.233:3000/d/Z6Jz03i7k/apache-jmeter-dashboard?orgId=1&refresh=5s

http://47.95.142.233:3000/d/ov0oEgdik/teng-xun-yun-84fu-wu-qi?orgId=1
1、它是什么类型的程序
CPU密集型/IO密集型
2、CPU最大是多少
3、CPU增长率是多少
现在 - 开始 /开始 *%
4、内存最大是多少
5、内存增长率是多少
6、吞吐量是多少
看聚合报告
7、响应时间是多少
看聚合报告
8、用户数是多少
线程数
9、每秒并发几个用户
线程数/时间
10、什么时候开始收集数据,什么时候截止
测试运行结束后开始收集数据


浙公网安备 33010602011771号