Jmeter性能测试

简介:

性能测试的概念有很多,这里不展开说明,此文章只介绍使用Jmeter如何进行相关性能测试。

JMeter压测的核心原理
基于各种协议,通过多线程的方式来模拟并发用户,设计各种场景来模拟真实的用户负载

JMeter运行在java虚拟机上的,基本原理是建立一个线程池,通过线程组驱动多线程,多线程运行sampler产生负载

参考文档:【JMeter】JMeter的工作原理_jmeter工作原理-CSDN博客

​​LoadRunner

  LoadRunner既支持多进程模拟,也支持多线程模拟

JMeter
  JMeter通过多线程的方式来模拟大量并发用户数

一、创建线程组

性能测试创建线程常用的有2种:Thread Group(普通线程)、jp@gc - Stepping Thread Group(混合场景)

1.1、Thread Group(普通线程)

参数解释:

线程数:设置发送请求的用户数目 即虚拟用户数,此处的线程数不等于每秒并发请求数; Ramp-up period:每个请求发生的总时间间隔,单位是秒。

循环次数:保持默认;除非按照明确指定的次数压测,即可指定明确次数;一般压测正式开始我们会勾选永远,然后通过调度器来控制脚本压测时间。

延迟创建线程直到需要:不用勾选

调度器:勾选---通过其控制压测时间,比如压测5分钟,则填入300s;

启动延迟:主要用于延迟多少时间后启动压测脚本,默认不使用;

注意:

      多个线程的默认执行顺序是随机

线程组中-调度器使用

1.2、jp@gc - Stepping Thread Group(混合场景)

参数解释:

第1行:这个线程组将参数最大多少线程数。 一般的项目,设置为几百 到1000就够了。
第2行:等待 xxx 秒启动
第3行:启动 xxx  线程   -----起始值为xxx
第4-5行:用5秒钟,累加10个线程,然后,每个线程都运行30秒。
第6行:所有的线程 都产生了之后,一起运行xx时间
第7行:每xx秒,停止xx个线程

二、接口并发-同步定时器

同步定时器(Synchronizing Time)又可称之为“集合点”

在性能测试中,尤其是抢购/抢红包/秒杀活动业务等某时段集中访问场景,需要模拟多用户集中并发测试,此时需要用到同步定时器(Synchronizing Timer)

参数解释:

  • Name:定时器名称,可根据用户需要自己填写。
  • Number of Simulated Users to Group by:设置同步的线程数量。当设置为0时,等同于线程组中设置的用户数量,当设置为20时,即当用户达到20时同时释放,当设置的数量大于线程数时,设置无效(数量不可设置为大于线程组中的线程数)。
  • Timeout in milliseconds:超时时间,单位为毫秒。当设置为0时,即当用户数量达到了设置的数量时则释放,否则一直等待,当设置为300毫秒时,则当时间达到300毫秒时,就释放已经集合的线程,不再等待

注意事项

  • 设置的值不能大于线程组 数量

  • 最好的情况是 【线程组】 可以被 【用户组】整除

  • 超时时间以毫秒为单位:指定人数 多少毫秒没集合到算超时

  • 超时时间是0则无限等待,如果是大于0,则未达到集合的【用户组】数量,会在超时后执行

三、建立资源监控

当压测脚本在 本地(wind\mac) 上调试成功后,在我们正式开始压测之前,我们会提前设置好监控的指标,接下来我们来添加资源利用率监控插件

类型及作用

聚合报告

jp@gc - PerfMon Metrics Collector--监控服务器资源

Transactions per Second:显示TPS插件

Response Times Over Time:响应时间插件(RT)

 jp@gc - Active Threads Over Time:活动线程数

jp@gc - Transactions per Second:每秒事务数,系统每秒处理请求次数,单位是次/秒。

 3.1、聚合报告

添加路径:线程组->添加->监听器->聚合报告(Aggregate Report)

字段解析(响应时间单位:毫秒) 

1)Label:每个Jmeter的element都有一个Name属性,这里显示的就是Name属性的值
2)#Sample:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
3)Average:平均响应时间-默认情况下是单个Request的平均响应时间当使用了Transaction Controller 时,也可以以Transaction为单位显示平均响应时间
4)Median:中位数,50%用户的响应时间
5)90%Line:90%用户响应时间
6)Min:最小响应时间
7)Max:最大响应时间
8)Error%:本次测试中出现错误的请求的数量/请求的总数
9)Throughput:吞吐量-默认情况下白石每秒的请求数
10)KB/sec:每秒从服务器端接收到的数据量

如何得出最佳性能指标?

  • 500线程 和 3000线程,500线程每次增加300个线程,持续压测得出最佳的吞吐量,此时线程数就是最佳

3.2、监控服务端硬件参数(cpu/内存等)

使用插件:jp@gc - PerfMon Metrics Collector

PerfMon Metrics Collector:即服务器性能监控数据采集器。在性能测试过程中,除了监控TPS和TRT,还需要监控服务器的资源使用情况,比如CPU、memory、I/O等。

该插件可以在性能测试中实时监控服务器的各项资源使用。

使用PerfMon Metrics Collector插件,需下载一个服务端插件ServerAgent,并在被测试服务器上启动

使用步骤:

1、添加“jp@gc - PerfMon Metrics Collector”监听器

2、启动ServerAgent服务:

Windows环境:
将下载好的ServerAgent解压,进入目录,双击ServerAgent.bat启动;
linux/Mac环境:
将下载好的ServerAgent上传至服务器,解压并进入目录,执ServerAgent.sh启动,默认使用4444端口

4444端口一般会开启失败,执行以命令更换开启端口

java -jar ./CMDRunner.jar --tool PerfMonAgent --tcp-port 8085 --udp-port 8085

3、运行jmeter查看监听结果

总结获取结果步骤:

1. 目标服务器上启动服务 startAgent

2. 添加一个目标服务器上的接口请求即压测接口

3. 添加 Jp@gc-Perfmon Metrics Collector

4. 设置线程组运行为永远(单次运行或运行时间不长,插件获取不到目标服务器指标数据)

5. 关闭本机上的所有杀毒软件

6. 运行测试计划/线程组,查看图表结果

3.3 其它监控插件

常用的插件:

1. Transactions per Second:显示TPS插件

2. Response Times Over Time:响应时间插件(RT)

3. jp@gc - Active Threads Over Time:活动线程数

4. jp@gc - Transactions per Second:每秒事务数,系统每秒处理请求次数,单位是次/秒。

插件介绍文章:

Jmeter插件下载(下载和使用教程)-CSDN博客

 1、jp@gc - Transactions per Second:显示tps插件

jmeter聚合报告中吞吐量,就相当于TPS/QPS/HPS;

一般情况下,用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器单击请求

Jmeter内的聚合报告内可以看到平均吞吐量,通过jp@gc - Transactions per Second可以查看某时间点的吞吐量

2、Response Times Over Time:响应时间插件(RT)

在聚合报告中可以查看平均值,详细内容,添加-监听器-jp@gc - Response Times Over Time

3、jp@gc - Active Threads Over Time:用户活动线程数

查看不同时间的活动用户数量

注意:

可以通过聚合报告中样本数+Active Threads Over Time + 施压机器(硬件使用率)+ 网络带宽 ,来判断施压机器是否达到最大性能,以及是否达到网络带宽上限;

可以考率分布式压测 或调整网络带宽

3.4 本地查看插件结果

执行压测试,一般都是使用命令行(非GUI)形式,我们添加的监控插件就无法查看了(实时监控);

这时插件就是只能成为压测完,用于总结作用了;判断性能瓶颈、以及是否需要调整施压数据

查看插件结果

第一步:下载.jtl文件

使用命令执行完后生成jtl文件,找到它下载到本地

第二步:本地jmeter引用查看

首先打开本地jmeter(GUI)-->新建对应插件-->然后通过路径找到jtl文件

四、命令行运行jmeter

使用GUI运行,是非常消耗性能的,一般会使用命名行运行jmeter进行测试

jmeter环境配置:Jmeter环境安装(超级简单)-CSDN博客

4.1 非GUI运行jmeter生成测试报告

jmeter -n -t file.jmx -1 result.jtl -e -o 存放报告文件名

参数说明

  • -n 非gui方式运行jmeter

  • -t :jmx 脚本路径

  • -l :result.jtl 运行结果保存路径,注意:.jtl 文件名不能重复,文件夹需要存在

  • -e :在脚本运行结束后生成 HTML 报告

  • -o :用于存放 HTML 报告的目录,文件夹需要存在

Linux/Mac系统

#Linux系统: 进入到Jmeter bin目录下运行
./jmeter.sh -n -t xx.jmx -l xx.jtl -e -o xx/dirname

#Mac系统: 进入到Jmeter bin目录下运行
./jmeter -n -t xx.jmx -l xx.jtl -e -o xx/dirname

Windows系统

# 进入到Jmeter bin目录下运行
jmeter.bat -n -t xx.jmx -l xx.jtl -e -o xx/dirname
 
# 示例:
jmeter.bat -n -t D:\桌面\jmeter_code\本地项目1.jmx -l D:\桌面\jmeter_code\res.jtl -e -o D:\桌面\jmeter_code\report

运行如图:

4.2 分布式命令

-r:表示启动所有的远程压力机

-R:指定特定的远程压力机执行测试(多台用,号隔开)

jmeter -n -t HTTP-001.jmx -l res.jtl -e -o reports -r

jmeter -n -t HTTP-001.jmx -l res.jtl -e -o reports -R 59.110.220.52:8899

分布式执行压测文章:

https://zhuanlan.zhihu.com/p/516064194

Jmeter分布式压力测试实现过程详解_java_脚本之家 (jb51.net)

jmeter分布式压力测试_jmeter压测3000并发-CSDN博客

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值