jmeter 弹性压测数据库


当前版本:

  • jmeter 5.6.3
  • mysql 5.7.39

简介

    JMeter 通过 Open Model Thread Group 来实现弹性模拟负载测试,它是5.4.1 版本中引入的一个实验性线程组。例如设置多个线程模式,再根据这些线程模式调整不同的并发数、暂停时间。由于Open Model Thread Group 是一个实验性线程组,可能会存在一些限制和不确定性。

        

文章目录如下

1. 下载插件

2. 插件用法

2.1. 界面描述

2.2. 线程设置方案

3. 测试步骤

3.1. 添加压测线程组

3.2. 设置JDBC配置

3.3. 构造简单业务

3.4. 配置监听器

3.5. 运行测试

4. 模拟双11业务


        

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点活动达到最高峰,后面持续下降。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513969.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux C编程

gcc编译器 gcc [options] [filenames] 其中,options是编译器所需要的选项参数,filenames是文件名。 gcc编译过程 C语言编译过程一般可以分为预处理、编译、汇编、链接四个步骤。 1.预处理阶段 预处理阶段主要处理宏定义和include,并进行语…

Luajit 2023移动版本编译 v2.1.ROLLING

文章顶部有编好的 2.1.ROLLING 2023/08/21版本源码 Android 64 和 iOS 64 luajit 目前最新的源码tag版本为 v2.1.ROLLING on Aug 21, 2023应该是修正了很多bug, 我是出现下面问题才编的. cocos2dx-lua 游戏 黑屏 并报错: [LUA ERROR] bad light userdata pointer 编…

flutter旋转动画,算法题+JVM+自定义View

在很多的博客或者书上,说有三种,除了上述的两种以外,还有一种是实现Callable接口。但是这种并不是,因为,我们检查JDK中Thread的源码,看它的注释: There are two ways to create a new thread o…

#QT(TCP网络编程-服务端)

1.IDE:QTCreator 2.实验:编写一个tcp服务端 QTcpsever QTcpsocket 3.记录: (1)先搭建界面 (2)服务端代码 a. pro QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c1…

Docker的安装跟基础使用一篇文章包会

目录 国内源安装新版本 1、清理环境 2、配置docker yum源 3、安装启动 4、启动Docker服务 5、修改docker数据存放位置 6、配置加速器 现在我们已经完成了docker的安装和初始配置。以下为基本测试使用 自带源安装的版本太低 docker官方源安装的话速度太慢了 所以本篇文…

CSS浮动实战,经典好文

零基础学web前端开发要怎么去学? 首先要学习的就是基础知识:html、css和JavaScript。HTML是内容,CSS是表现,JavaScript是行为。前端开发的门槛其实非常低,与服务器端语言先慢后快的学习曲线相比,前端开发的学习曲线是…

1909_Arm Cortex-M3编程模型

1909_Arm Cortex-M3编程模型 全部学习汇总: g_arm_cores: ARM内核的学习笔记 (gitee.com) 编程模型的部分除了单独的核心寄存器描述之外,它还包含有关处理器模式和软件执行和堆栈的特权级别的信息。 处理器有两种模式,分别是线程模式和Handle…

运维知识点-hibernate引擎-HQL

HQL有两个主要含义,分别是: HQL(Hibernate Query Language)是Hibernate查询语言的缩写,它是一种面向对象的查询语言,类似于SQL,但不是去对表和列进行操作,而是面向对象和它们的属性…

动态规划(算法竞赛、蓝桥杯)--状态压缩DP蒙德里安的梦想

1、B站视频链接&#xff1a;E31 状态压缩DP 蒙德里安的梦想_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N12,M1<<N; bool st[N];//st[i]存储合并列的状态i是否合法 long long f[N][M];//f[i][j]表示摆放第i列&#xff0c;状态为…

R语言的数据类型与数据结构:向量、列表、矩阵、数据框及操作方法

R语言的数据类型与数据结构&#xff1a;向量、列表、矩阵、数据框及操作方法 介绍向量列表矩阵数据框 介绍 R语言拥有丰富的数据类型和数据结构&#xff0c;以满足各类数据处理和分析的需求。本文将分享R语言中的数据类型&#xff0c;包括向量、列表、矩阵、数据框等&#xff…

【数据结构】顺序表+链表

目录 1.顺序表 1.1初始化顺序表 1.2销毁顺序表 1.3检查容量并扩容 1.4把某个元素插入到下标为pos的位置 1.5头插和尾插 1.6删除下标为pos的元素 1.7头删和尾删 2.顺序表的问题及思考 3.链表 3.1链表的访问 3.2链表的增删查改 1.顺序表 顺序表的本质其实就是一个数组…

【SpringBoot3.x教程02】SpringBoot配置文件详解

前言&#xff1a;什么是配置文件 SpringBoot的配置文件是指用于定义和管理SpringBoot应用程序配置的文件。这些配置文件允许开发者调整和控制应用程序的行为&#xff0c;而无需改变代码。主要有两种格式的配置文件&#xff1a; 1、application.properties&#xff1a;这是一种使…