JMeter 使用

Jmeter安装使用 - 鹿先森JIAN - 博客园 (cnblogs.com)

逻辑控制器

IF 控制器

添加方式:测试计划 → 线程组 → 逻辑控制器 → IF控制器

案例:

  • 1、使用 ‘用户定义的变量’ 定义一个全局变量name,name的值可以是 baidu 或 itcast
  • 2、根据name的变量值实现对应网站的访问
用户定义的变量:name = baidu
IF 控制器:编写判断语句,可 JS形式函数形式

判断为 true,则执行里面的 HTTP请求

由于 ‘用户定义的变量’ 中 name = baidu,所以执行了百度请求,而没有执行 itcast 请求。

循环控制器

添加方式:测试计划 → 线程组 → 逻辑控制器 → 循环控制器

思考:线程组属性可以控制循环次数,那么循环控制器有什么用?
  • 控制的作用域不同:线程组控制是线程组下的所有请求,循环控制器控制逻辑控制器下的所有请求
  • 如果线程组循环次数为M,循环控制器循环次数为N:
    • 循环控制器下的HTTP请求运行:M*N 次
    • 线程组下的其他HTTP请求运行:M 次

ForEach 控制器

ForEach控制器一般和用户自定义变量或者正则表达式提取器一起使用,其在用户定义变量或者从正则表达式提取器的返回结中读取一系列相关的变量。
该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。
添加方式:测试计划 → 线程组 → 逻辑控制器 → ForEach控制器
案例一:
将 “用户定义的变量” 作为参数,传递给HTTP请求。
取值:${输出变量名称}

案例二:
访问 itcast 页面,用 “正则表达式提取器” 提取的页面多组地址。
用ForEach控制器,将地址逐个传递给HTTP请求。

-1:取出所有地址数据

从地址数据中,循环取10个。

发送HTTP请求,携带变量参数。

JMeter 定时器

同步定时器 - 并发测试

同步定时器相当于一个储蓄池,累积一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起并发,所以可以用来做大数据量的并发请求。

简单来说,就是阻塞线程,直到阻塞了n个线程,然后立即释放它们,模拟高并发。

添加方式:测试计划 → 线程组 → HTTP请求 → 定时器 → 同步定时器(Synchronizing Timer)

使用场景:测试抢购、秒杀、抢红包等高并发的场景时使用。

案例一:

模拟百度请求,线程组100人,每30一组,5000ms超时时间。

超时时间:设置为0时,如果用户组的数量积累不到30,就导致程序挂起。所以,别设为0。

监听器 → 聚合报告:点击运行,查看动态上升的用户请求数。

常数吞吐量定时器 - 稳定性测试

英文名:Constant Throughput Timer

让JMeter以指定数字的吞吐量(以每分钟的样本数为单位,而不是每秒)执行。 吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组。
使用场景:需要按指定的吞吐量发送请求时,可以使用常数吞吐量定时器。
添加方式:测试计划 → 线程组 → HTTP请求 → 定时器 → 常数吞吐量定时器
使用步骤:
  • 1. 添加线程组,循环次数:永远
  • 2. 添加HTTP请求
  • 3. 添加常数吞吐量定时器
  • 4. 添加查看结果树
  • 5. 添加监听器 - 聚合报告

目标吞吐量:是每分钟的吞吐量,600/mins

启动线程组,查看聚合报告,吞吐量显示的是:每秒的吞吐量QPS = (目标吞吐量 / 60s) * 线程数

固定定时器 - 延迟请求

就是给HTTP请求,设一个延迟时间,时间到了才发送请求。
案例:
(1)IHRM系统登录错误3次后,锁定1分钟,等待1分钟后重新输入正确的用户名密码登录成功。
  • 请求方法:POST
  • 请求URL:https://ihrm-test.itheima.net/api/sys/login
  • 请求头:Content-Type: application/json;charset=UTF-8
  • 请求体:{"mobile":"13800000002","password":"123456"}
步骤:
  • 添加线程组
  • 添加HTTP请求1 - 错误1次
  • 添加HTTP请求2 - 错误2次
  • 添加HTTP请求3 - 错误3次
  • 添加HTTP请求4 - 正确用户名密码
    • 在HTTP请求4下,添加固定定时器
  • 添加查看结果树

HTTP信息头管理器:post要设置请求头才行

消息体数据:表单、json数据。

JMeter 分布式

在使用JMeter进行性能测试时,如果项目需要支持10000用户并发,但是单台电脑只能支持1000个用户并发该怎么处理?
应用场景:
当单个测试机无法模拟用户要求的业务场景时,可以使用多台测试机进行模拟,就是Jmeter的分布式测试。
原理:

分布式相关注意事项

  • 关闭防火墙
  • 所有的控制机、代理机、服务器都在同一个网络上
  • 所有机器的Jmeter和JAVA版本必须一致
  • 关闭RMI SSL开关

分布式配置与运行

代理机:多台代理机要设不同的端口号;控制机:添加所有代理机的IP+port

 案例

1. 把 jmeter 复制两遍,当作代理机1、代理机2

2. 分别修改代理机agent01、agent02的 bin/jmeter.properties 文件:设置端口(1999、2999),修改 rmi.ssl.disable为true

3.  修改控制机bin/jmeter.properties 文件:配置代理机的IP+port,修改 rmi.ssl.disable为true

4. 关闭防火墙,启动代理机,启动控制机

  • 代理机:进入bin 目录,双击运行 jmeter-server.bat 文件,会弹起cmd窗口(不用关)
  • 控制机:进入bin 目录,双击运行 jmeter.bat 文件,进入可视化界面

5. 控制机:编写测试,发送请求

线程组:设置线程数为5,即每台代理机发5次请求。

发送请求:运行 → 远程启动所有

总请求数 = 线程数 * 代理机数

JMeter 报告

聚合报告

案例:
  • 1、请求:https://www.baidu.com
  • 2、模拟5个用户并发,控制服务器QPS为20,运行时长设置为10分钟
  • 3、添加聚合报告,收集系统性能指标:响应时间、吞吐量、错误率、网路速率

正常情况下,响应时间的结果取平均值;
当响应时间最大值特别高(超出平均水平特别多),导致平均值不能代表正常大部分水平时,可以使用百分比时间。

HTML报告

进入到 jmeter 的 bin 目录下,直接 cmd 弹窗,输入命令即可。

如果忘记命令咋写,可以启动 bin/jmeter.bat 文件,cmd窗口有:

案例

  • 1、请求:https://www.baidu.com
  • 2、模拟5个用户并发,控制服务器QPS为20,运行时长设置为1分钟
  • 3、添加聚合报告
  • 4、生成测试报告

 

下图中,[测试结果文件]、[测试报告保存目录] 不能事先存在,有则删。

生成前,该目录下不能有测试结果文件:result.jtl,不能有测试报告保存目录:report

 

常用平均并发数计算公式

PV:(Page View)即页面访问量,每打开一次页面PV计数+1,刷新页面也是。PV只统计页面访问次数。
UV:(Unique Visitor) 唯一访问用户数,用来衡量真实访问网站的用户数量。
一般用UV统计用户活跃数,用PV统计用户访问页面的频率

普通计算方式

0.48 请求数 / 秒

二八原则计算方式

按照业务数据进行计算

业务数据:有的公司会统计一定时间内的所有业务数据,我们可以根据这个业务数据曲线图,统计出最多请求的数量和时间比例。
计算模拟用户正常业务操作(稳定性测试)的并发量:

考虑系统的有效工作时长,区间内的总请求数,结合二八原则进行计算。

计算模拟用户峰值业务操作(压力测试)的并发量:

系数:每家公司不一样,热门系统就高点吧,得估算未来业务量。

总结 + 案例

案例

JMeter 下载第三方插件

说明: 先下载JMeter插件管理工具包,再用此包下载JMeter插件。

下载JMeter插件管理工具包

下载 jar 包:Install :: JMeter-Plugins.org

将 jar 包存放到 JMeter 安装目录 lib/ext/ 目录下:

安装第三方插件

配置好插件管理工具包后,打开JMeter,点击 “选项” → “Plugins Manager” 打开插件管理器,其他的插件都可以在这里进行管理。

  • 打开 Plugins Manager 插件管理器
  • 选择 Available Plugins,即当前可用的插件
  • 选择需要下载的插件(等待右方文本内容展示出来)
  • 点击右下角的下载按钮,自动地完成下载,Jmeter会自动重启

 

推荐插件:提升测试效率:JMeter 常用插件推荐_jmeter常用插件-CSDN博客

  • 3 Basic Graphs:基本图表
  • 5 Additional Graphs:附加图表
  • Custom Thread Groups:自定义线程组
  • PerfMon (Servers Performance Monitoring):服务器性能监控

性能测试常用图表及组件

1. Concurrency Thread Group:阶梯线程组

作用:它能够设置阶梯式增加用户数,运行时间。

添加方式:测试计划 → 线程(用户)→ Concurrency Thread Group

2. Transactions per Second(TPS):每秒事务数

性能测试中,最重要的两个指标之一。

作用:在测试脚本执行过程中,监控查看服务器的TPS表现,比如整体趋势、实时平均值走向、稳定性等,相当于聚合报告里的 “吞吐量” 指标数据。

区别:聚合报告里的 “吞吐量” 指标数据是最后的数据,而 Transactions per Second 是整个过程的浮动数据。

添加方式:测试计划 → 线程组 → 监听器 → Transactions per Second

3. Response Times Over Time(TRT):事务响应时间

性能测试中,最重要的两个指标的另外一个。

作用:是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

添加方式:测试计划 → 线程组 → 监听器 → Response Times Over Time

4. Bytes Throughput Over Time:字节 / 每秒吞吐量(发送、接收)

作用:查看服务器吞吐量(单位:字节/秒),包括接收、发送。相当于聚合报告里的 “发送”、“接收” 指标数据。

添加方式:测试计划 → 线程组 → 监听器 → Bytes Throughput Over Time

5. PerfMon Metrics Collector 性能指标收集器

服务器端性能监控数据采集器。在性能测试过程中,除了监控TPS和TRT,还需要监控服务器的资源使用情况,比如CPU、memory、I/O等。该插件可以在性能测试中实时监控服务器的各项资源使用

添加方式:测试计划 → 线程组 → 监听器 → PerfMon Metrics Collector

注意:使用之前需要在服务器端安装监听服务程序并启动

监控服务器服务程序:

  • 1. 下载安装包 ServerAgent-2.2.3.zip,链接地址:https://github.com/undera/perfmon-agent
  • 2. 解压 ServerAgent-2.2.3.zip,(Linux需要修改startAgent.sh文件权限:chmod 777 startAgent.sh)
  • 3. 启动:windows 双击 startAgent.bat;linux 用命令 ./startAgent.sh
  • 4. 启动这个工具后,jmeter的插件 jp@gc - PerfMon Metrics Collector 就可以收集服务端的资源使用率了。

案例

  • 1、启动windows上安装的Tpshop商城项目
  • 2、使用JMeter编写脚本,访问首页,控制运行时间为60s,并同步监控服务器资源指标

操作步骤:

  • 1. 上传 ServerAgent-2.2.3.zip 到windows服务器上,并进行解压
  • 2. 启动ServerAgent程序 startAgent.bat
  • 3. 添加线程组,配置持续时间为60s
  • 4. 添加HTTP请求- 首页
  • 5. 添加监听器 → PerfMon Metrics Collector 插件,设置监控指标。
  • 6. 添加聚合报告

导出:右键图标,可以保存为图片、CSV文件。。。

监控性能指标

系统指标:响应时间、吞吐量、错误率、并发数

使用监听器 → 聚合报告,它能查看系统客户端的这些信息。

资源指标:CPU、内存、磁盘、网络

使用监听器 → PerfMon Metrics Collector,具体用法看上面介绍。

posted @ 2023-10-01 18:43  鹿先森JIAN  阅读(159)  评论(0编辑  收藏  举报