jmeter 按流量阶梯式压测数据库

2024-03-04 09:20

本文主要是介绍jmeter 按流量阶梯式压测数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


当前版本:

  • jmeter 5.6.3
  • mysql 5.7.39

简介

    JMeter 通过 BZM - Arrivals Thread Group 来模拟并发到达的用户流量、按时间加压,可以有效地帮助测试人员评估系统在高压力和高并发情况下的性能表现。

        

文章目录如下

1. 下载插件

2. 界面说明

3. 测试步骤

 3.1. 添加压测线程组

3.2. 设置JDBC配置

3.3. 构造简单业务

3.4. 配置监听器

3.5. 运行测试

4. 按秒压测


        

1. 下载插件

地址如下(下载2个包,一个用于阶梯式压测,一个用于增加性能监听器)

Download :: JMeter-Plugins.org

注意:JMeter版本5.2.0以上)

将下载的两个zip包解压后,找到 JMeterPlugins-Standard.jar 和 JMeterPlugins-Extras.jar,放到 jmeter\lib\ext\ 下,重启 jmeter 生效。

        

2. 界面说明

添加阶梯式压测线程组

  • 右击测试计划 → 添加 → 线程(用户) → bzm - Arrivals Thread Group

        

界面说明

  • Target Rate:目标速率 (请求数,可以理解为最大吞吐量)。如果选择下面单位为分钟,那么这里的 10000 就是每分钟吞吐量达到10000;如果选择秒,则表示每秒达到10000。
  • Ramp Up Time:设置多久达到最大请求数
  • Ramp Up Steps Count:设置阶梯次数(默认0,直线上升)
  • Hold Target Rate Time:达到最大请求数后,设置继续运行时间
  • Time Unit:选择时间单位(minutes:分,second:秒)
  • Thread lterations Limit:线程迭代限制(每个线程执行测试计划的次数)
  • Log Thread Status into File:将线程状态记录到文件
  • Concurrency Limit:并发限制

        

3. 测试步骤

jmeter 通过如下组件来构造高并发:

bzm - Arrivals 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. 添加压测线程组

  • 右击测试计划 → 添加 → 线程(用户) → bzm - Arrivals Thread Group

需求:吞吐量在3分钟逐渐递增(共递增5次),最终吞吐量达到10000/分,达到1w后继续运行1分钟。配置如下:

        

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. 运行测试

        

【最终结果】聚合报告

        

【最终结果】响应时间

        

【最终结果】吞吐量

        

【最终结果】线程数

        

总结

我们配置的吞吐量为 10000/分,换算为每秒 10000 / 60 = 167。从上面测试结果来看,响应时间非常低,吞吐量很稳定,并且仅1个线程就能够满足要求,说明此次压测并没有达到数据库可承受的最大值,如果需要测试程序最大承受压力直接修改 Target Rate 即可。

        

4. 按秒压测

我们将单位设置为秒,那么设置的最大吞吐量就是每秒最大达到1000。这里分了5个阶梯,达到最大后持续运行 2+5分钟,观察是否指标稳定。

  • Concurrency Limit 限制了最大100个线程数。 

        

【结果如下】

吞吐量按需求持续增长,最终达到1000/s,相对稳定

        

线程数随着吞吐量的增加也是有所增长,整体也比较稳定

        

响应时间较快,也相对稳定。

这篇关于jmeter 按流量阶梯式压测数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772722

相关文章

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma