性能测试(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)选择插件管理

 

  (2)Available Plugins 中搜索 PerfMon 进行安装 ,安装完成后会自动重启。

 

(3)在监听器下可以看到我们安装的这个插件

 

5.2 ServerAgent

  ServerAgent是收集服务器数据的中间件,通过serverAgent收集被测系统的资源数据。

  要测的程序部署在哪个服务器,就把ServerAgent放在哪个服务器上,通过插件PerfMon 就会展示出来。

 

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

 

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

 

 

 (3)启动成功后:

 

进行监测:

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

 

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

 

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

 

6、Grafana可视化展示工具

  grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。 通过Grafana展示数据 ,会比较好看。

   原理: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、什么时候开始收集数据,什么时候截止

测试运行结束后开始收集数据

 

 

posted @ 2022-05-20 17:25  jia---  阅读(182)  评论(0)    收藏  举报