当前版本:
- jmeter 5.6.3
- mysql 5.7.39
简介
JMeter 通过 Open Model Thread Group 来实现弹性模拟负载测试,它是5.4.1 版本中引入的一个实验性线程组。例如设置多个线程模式,再根据这些线程模式调整不同的并发数、暂停时间。由于Open Model Thread Group 是一个实验性线程组,可能会存在一些限制和不确定性。
文章目录如下
1. 下载插件
地址如下(下载2个包,一个用于弹性压测,一个用于增加性能监听器)
https://jmeter-plugins.org/downloads/old/
(注意:JMeter版本5.4.1以上)
将下载的两个zip包解压后,找到 JMeterPlugins-Standard.jar 和 JMeterPlugins-Extras.jar,放到 jmeter\lib\ext\ 下,重启 jmeter 生效。
2. 插件用法
2.1. 界面描述
添加线程组步骤:
- 右击测试计划 → 添加 → 线程(用户) → Open Model Thread Group
中文名称
界面说明
- rate(1/min):设置每分钟流量数。
- rate(60/min) 表示每分钟60个请求(换算每秒1个请求)
- rate(5/sec) 表示每秒钟5个请求。
- random_arrivals(10 min):设置测试时长。
- random_arrivals(1 min) 表示每个请求之间的到达时间在 1 分钟内是随机的。
- pause(1 min):每个线程模式启动之间的暂停时间。
- pause(1 min) 表示每个模式在启动后会等待 1 分钟,然后才会启动下一个模式。
- /* comment */:注释。
- Random seed:用于生成随机数的起始值(默认0)。
单位说明
sec :秒
min :分
hour:时
day :天
2.2. 线程设置方案
【方案一】简单模型:测试100个线程,持续30秒
rate(10/sec)
random_arrivals(30 sec)
【方案二】按阶段压测:不同阶段压测不同线程数
rate(100/sec) random_arrivals(10 min)
pause(2 min)
rate(200/sec) random_arrivals(10 min)
3. 测试步骤
jmeter 通过如下组件来构造高并发:
Open Model Thread Group # 模拟弹性压测
JDBC Connection Configuration # 配置数据库连接信息
JDBC Request # 构造业务
通过如下监听器来查看性能指标
聚合报告 # 查看整体性能指标
jp@gc - Response Times Over Time # 查看响应时间走势图表
jp@gc - Transactions per Second # 查看吞吐量走势图表
jp@gc - Active Threads Over Time # 查看线程数走势
3.1. 添加压测线程组
- 右击测试计划 → 添加 → 线程(用户) → Open Model Thread Group
需求:先模拟10个流量运行1分钟后休眠3秒,再模拟20个流量运行1分钟后休眠5秒,最后模拟10个流量运行2分钟
rate(10/sec) random_arrivals(1 min)
pause(3 sec)
rate(20/sec) random_arrivals(1 min)
pause(5sec)
rate(10/sec) random_arrivals(2 min)
3.2. 设置JDBC配置
- 右击测试计划 → 添加 → 配置元件 → JDBC Connection Configuration
"""MySQL"""
URL:jdbc:mysql://[IP]:[端口]/[数库名] # jdbc:mysql://localhost:3306/mysql
Driver:com.mysql.jdbc.Driver
"""Oracle"""
URL:jdbc:oracle:thin:@[IP]:[端口]:[数库名] #jdbc:oracle:thin:@localhost:1521:orcl
Driver:oracle.jdbc.OracleDriver
"""PostgreSQL"""
URL:jdbc:postgresql://[IP]:[端口]/[数库名] # jdbc:postgresql://localhost:5432/postgres
Driver:org.postgresql.Driver
3.3. 构造简单业务
- 右击线程组 → 添加 → 取样器 → JDBC Request
简单读语句(仅举例)
3.4. 配置监听器
- 右击线程组 → 添加 → 监听器 → 聚合报告
- 右击线程组 → 添加 → 监听器 → jp@gc - Response Times Over Time
- 右击线程组 → 添加 → 监听器 → jp@gc - Transactions per Second
- 右击线程组 → 添加 → 监听器 → jp@gc - Active Threads Over Time
所有基础配置如下:
3.5. 运行测试
点击启动即可
最终结果如下:
【线程数走势图】
【响应时间走势图】
【吞吐量走势图】
4. 模拟双11业务
举一个模拟双11的简单用例,需求如下(1天):
- 浏览商品:从早上到晚上最大流量设定100w。10点、12点、18点抢购活动,那么在这几个时间点流量达到最高峰。
- 加入购物车:模拟用户每浏览10件商品加入一个购物车。
- 提交订单:模拟用户在抢购活动时间段提交订单占购物车70%,平时占20%,直接提交订单占整个订单的10%。
- 查询订单:模拟用户在提交订单后会有50%几率查看订单。
- 查询其他信息:模拟一些复杂计算的查询。
我笔记本不支持大并发,这里举例子设定最大流量为100。总体设置如下:
举一个 "浏览商品" 的例子,其他业务根据需求配比
rate(${__Random(1,5,)}/sec) random_arrivals(6 hour) /* 00~06点 */
rate(${__Random(2,30,)}/sec) random_arrivals(1 hour) /* 06~07点 */
rate(${__Random(20,60,)}/sec) random_arrivals(1 hour) /* 07~08点 */
rate(${__Random(40,90,)}/sec) random_arrivals(1 hour) /* 08~09点 */
rate(${__Random(80,100,)}/sec) random_arrivals(1 hour) /* 09~10点 */
rate(${__Random(70,100,)}/sec) random_arrivals(1 hour) /* 10~11点 */
rate(${__Random(80,100,)}/sec) random_arrivals(1 hour) /* 11~12点 */
rate(${__Random(70,100,)}/sec) random_arrivals(1 hour) /* 12~13点 */
rate(${__Random(30,80,)}/sec) random_arrivals(1 hour) /* 13~14点 */
rate(${__Random(20,60,)}/sec) random_arrivals(2 hour) /* 14~16点 */
rate(${__Random(30,100,)}/sec) random_arrivals(2 hour) /* 16~18点 */
rate(${__Random(70,100,)}/sec) random_arrivals(1 hour) /* 18~19点 */
rate(${__Random(50,90,)}/sec) random_arrivals(2 hour) /* 19~21点 */
rate(${__Random(30,70,)}/sec) random_arrivals(2 hour) /* 21~23点 */
rate(${__Random(10,50,)}/sec) random_arrivals(1 hour) /* 23~24点 */
这里主要举个例子,仅测试24分钟。来看一下最终吞吐量走势
一般情况下0~6点只有很少部分用户会浏览商品、下单,从6点开始流量会持续增长,10点、12点会达到最高峰。下午用户吃饭、午觉,流量下跌。14点后开始持续增长,直到18点活动达到最高峰,后面持续下降。