Jmeter 实战 JDBC配置

news2024/10/23 18:24:13

请在此添加图片描述

JDBC

JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API。通过这个API,可以直接连接并执行SQL脚本,与数据库进行交互。

使用JMeter压力测试时,操作数据库的场景

在使用JMeter进行接口压力测试时,有时需要批量生成测试数据,这时可以使用JMeter连接数据库以创建相应的测试数据。测试结束后,还需要对测试数据进行还原或删除,以清理不必要的数据。这些操作都涉及到连接数据库并执行SQL语句。

以下是使用JMeter连接数据库的方法:

🧹 添加JDBC驱动程序:将JDBC驱动程序(如:MySQL驱动程序)添加到JMeter的<Apache-JMeter>/lib目录下。

🧹 配置JDBC连接字符串:在JMeter中,使用JDBC Connection Configuration元件配置数据库连接信息,包括URL、用户名、密码等。

🧹 编写JDBC请求:使用JDBC Request元件编写SQL语句,并在JMeter中执行。

🧹 添加JDBC预处理语句:在JMeter中,使用JDBC PreProcessor元件添加预处理语句,如:插入、更新等操作。

🧹 添加JDBC后置处理语句:在JMeter中,使用JDBC PostProcessor元件添加后置处理语句,如:查询、删除等操作。

通过以上步骤,可以在JMeter中使用JDBC接口连接数据库,执行SQL语句,以满足压力测试中的数据准备和清理需求。

数据库驱动包

Jmeter 连接 Mysql 数据库需安装对应的驱动包;

📩 下载地址:https://dev.mysql.com/downloads/connector/j/

请在此添加图片描述

**安装:**下载完成后解压放到Jmeter的 lib 下;

请在此添加图片描述

创建测试计划

在 JMeter 主界面上,右键单击 Test Plan,然后选择 Add -> Threads (Users) -> Thread Group。这将创建一个线程组。

请在此添加图片描述

配置 JDBC Connection Configuration

📩 步骤:添加配置元件 - JDBC Connection Configuration;

在 JDBC 连接中,配置数据库连接信息,包括 JDBC URL、用户名和密码等。

☕ **Variable Name for created pool:**字段用于设置一个变量名,该变量名将用于在测试计划中引用创建的JDBC连接池;

例如:如果将"Variable Name for created pool"字段设置为myJdbcPool,则可以在其他JDBC元件(如JDBC Request、JDBC PreProcessor和JDBC PostProcessor)中通过在"Variable Name"字段中输入myJdbcPool来引用此JDBC连接池。

这样,可以在测试计划中轻松地重用JDBC连接池,而无需为每个JDBC元件单独配置连接信息。这有助于提高测试计划的可维护性和可读性。

☕ Database URL:字段用于指定要连接的数据库的JDBC URL;

JDBC URL的格式通常为:jdbc:<数据库类型>://<主机名>:<端口号>/<数据库名>。以下是一些常见数据库的JDBC URL示例:

MySQLjdbc:mysql://localhost:3306/mydatabase
PostgreSQLjdbc:postgresql://localhost:5432/mydatabase
Oraclejdbc:oracle:thin:@localhost:1521:mydatabase
SQL Serverjdbc:sqlserver://localhost:1433;databaseName=mydatabase

请根据要连接的数据库类型和配置替换相应的值。在配置JDBC Connection Configuration元件时,请确保输入正确的JDBC URL,以便JMeter能够成功连接到目标数据库。

在JDBC URL中,可以在数据库名称之后添加一些可选参数,以便进一步配置连接(不喜欢可以不写)

MySQL
useSSL=false:禁用SSL加密。
serverTimezone=UTC:设置服务器时区。
allowPublicKeyRetrieval=true:允许从服务器获取公钥。
useUnicode=true:使用Unicode字符集。
characterEncoding=UTF-8:设置字符编码为UTF-8。
示例:
jdbc:mysql://localhost:3306/mydatabase?
useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8
PostgreSQL
ssl=false:禁用SSL加密。
sslmode=disable:禁用SSL模式。
currentSchema=myschema:设置当前模式。
示例:jdbc:postgresql://localhost:5432/mydatabase?ssl=false&sslmode=disable&currentSchema=myschema
Oracle
useSSL=false:禁用SSL加密。
defaultRowPrefetch=50:设置默认的行预取值。
示例:jdbc:oracle:thin:@localhost:1521:mydatabase?useSSL=false&defaultRowPrefetch=50
SQL Server
encrypt=false:禁用加密。
trustServerCertificate=true:信任服务器证书。
loginTimeout=30:设置登录超时时间(以秒为单位)。
示例:
jdbc:sqlserver://localhost:1433;databaseName=mydatabase;encrypt=false;trustServerCertificate=true;loginTimeout=30

请注意,这些参数可能因数据库类型和驱动程序版本而异。在配置JDBC URL时,请根据数据库类型和驱动程序版本选择合适的参数。如果不确定要使用哪些参数,可以查阅数据库驱动程序的文档以获取更多信息。在大多数情况下,不需要添加这些可选参数,除非需要进一步配置连接。

☕ **JDBC Driver class:**JDBC 驱动程序类名,用于加载数据库的 JDBC 驱动程序。每个数据库都有对应的驱动程序类名。例如,对于 MySQL 数据库,驱动程序类名通常是 com.mysql.jdbc.Driver

☕ **username:**数据库的用户名;

☕ **passwrod:**数据库的密码;

其他参数请自行翻阅API;

请在此添加图片描述J

**JDBC Driver:**不同的数据库和驱动连接方式参考下表

请在此添加图片描述

配置 JDBC Request

📩 步骤 :在线程组上右键单击,选择 Add -> Sampler -> JDBC Request (线程组-添加-取样器-JDBC Request)。将创建一个 JDBC 请求,用于模拟数据库操作。

❣️ **Variable Name bound to pool:**字段用于指定一个已经在JDBC Connection Configuration元件中创建的JDBC连接池的变量名

例如,如果在JDBC Connection Configuration元件中将"Variable Name for created pool"字段设置为myJdbcPool,则可以在JDBC Request元件中将"Variable Name bound to pool"字段设置为myJdbcPool,以便使用此JDBC连接池。

这样,可以在测试计划中轻松地重用JDBC连接池,而无需为每个JDBC Request元件单独配置连接信息。这有助于提高测试计划的可维护性和可读性。请确保在JDBC Request元件中输入正确的变量名,以便JMeter能够找到并使用正确的JDBC连接池。

❣️ Query Type: 字段用于指定要执行的SQL查询类型

Select Statement:执行一个SQL SELECT查询,用于从数据库中检索数据。
Update Statement:执行一个SQL UPDATE查询,用于修改数据库中的数据。
Insert Statement:执行一个SQL INSERT查询,用于向数据库中插入新数据。
Delete Statement:执行一个SQL DELETE查询,用于从数据库中删除数据。
Callable Statement:执行一个SQL存储过程或函数。
Prepared Select Statement:执行一个预编译的SQL SELECT查询,用于从数据库中检索数据。与"Select Statement"类似,但使用预编译的查询可以提高性能并防止SQL注入攻击。
Prepared Update Statement:执行一个预编译的SQL UPDATE查询,用于修改数据库中的数据。与"Update Statement"类似,但使用预编译的查询可以提高性能并防止SQL注入攻击。

在配置JDBC Request元件时,请根据要执行的SQL查询类型选择合适的"Query Type"。在执行预编译查询时,还需要在"Parameter values"字段中指定查询参数的值。请确保选择正确的"Query Type",以便JMeter能够正确执行SQL查询。

❣️ Query: 字段用于输入要执行的SQL查询语句;

在JMeter的JDBC Request元件中,"Query"字段用于输入要执行的SQL查询语句

以下是一些常见的SQL查询示例:

Select Statement

SELECT * FROM users WHERE username = 'JohnDoe';

Update Statement

UPDATE users SET email = 'newemail@example.com' WHERE username = 'JohnDoe';

Insert Statement

INSERT INTO users (username, email) VALUES ('JohnDoe', 'johndoe@example.com');

Delete Statement

DELETE FROM users WHERE username = 'JohnDoe';

Callable Statement

{call my_stored_procedure(?, ?)}

在配置JDBC Request元件时,请根据要执行的SQL查询类型和需求输入相应的查询语句。请确保输入正确的查询语句,以便JMeter能够正确执行SQL查询。如果使用的是预编译查询,请确保在"Parameter values"字段中指定查询参数的值。在执行存储过程或函数时,请确保在"Query"字段中使用正确的语法。

在JMeter的JDBC Request元件中,确实不建议在"Query"字段中使用分号(;),因为JMeter可能无法正确解析和执行带有分号的查询语句

在JMeter的JDBC Request元件中,不支持在单个"Query"字段中编写多条SQL语句。如果需要执行多条SQL语句,可以考虑以下方法:

  1. 使用多个JDBC Request元件:为每个SQL语句创建一个单独的JDBC Request元件。这样,可以在每个元件中编写一条SQL语句,并按照测试计划中的顺序执行它们。
  2. 使用事务:如果数据库支持事务,可以在单个JDBC Request元件中使用事务来执行多条SQL语句。在"Query"字段中编写一个BEGIN TRANSACTION语句,然后编写的SQL语句,最后编写一个COMMIT或ROLLBACK语句。这样,可以在单个JDBC Request元件中执行多条SQL语句,并确保它们作为一个原子操作执行。

请注意,这些方法可能因数据库类型和驱动程序版本而异。在使用JMeter的JDBC Request元件时,请根据的数据库类型和驱动程序版本选择合适的方法。如果不确定如何执行多条SQL语句,可以查阅数据库驱动程序的文档以获取更多信息。在大多数情况下,使用多个JDBC Request元件是最简单和最可靠的方法。

执行步骤

设置线程组参数:

  • 在线程组中,可以设置并发用户数、循环次数等参数,以模拟实际负载。

运行测试:

  • 点击工具栏上的绿色运行按钮以开始测试。

查看结果:

  • 在测试运行完成后,你可以查看各种性能指标,如响应时间、吞吐量等。
  • 还可以导出测试结果以进一步分析。

请在此添加图片描述

在执行测试之前,确保已经正确配置了数据库连接池,包括连接池大小、最大连接数等参数。另外,还要注意测试环境的负载和资源使用情况,以确保测试结果的准确性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gin 协程mysql客户端

一、Gin框架 mysql配置 这里选择yaml文件配置 二、配置读取 viper 读取yaml文件中对应配置 三、mysql 的协程客户端 文件位置 package databaseimport ("database/sql""fmt""github.com/spf13/viper""log""net/http"&quo…

JavaWeb 25.Vite

目录 一、Vite的介绍 二、Vite创建Vue3工程化项目 ViteVue3项目的创建、启动、停止 创建 启动 停止 干净感来源于对自我的驯服 —— 24.10.23 一、Vite的介绍 在浏览器支持 ES 模块之前&#xff0c;JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们…

Missing classes detected while running R8报错解决方案

Android 打包release版本时报错如下&#xff1a; > Task :printlib:minifyReleaseWithR8 FAILED AGPBI: {"kind":"error","text":"Missing classes detected while running R8. Please add the missing classes or apply additional ke…

canvas-editor首行缩进

canvas-editor中渲染部分的源码都在Draw.ts里&#xff0c;能找到computeRowList方法中并没有实现首行缩进相关的逻辑&#xff0c;但是实现了element.type ElementType.TAB的缩进&#xff0c;如图&#xff1a; 因此我们可以基于tab进行首行缩进的逻辑编写&#xff0c;在main.ts…

通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)

介绍 这篇博文详细介绍了如何发现CVE-2024-6778和CVE-2024-5836的&#xff0c;这是Chromium web浏览器中的漏洞&#xff0c;允许从浏览器扩展&#xff08;带有一点点用户交互&#xff09;中进行沙盒逃逸。 简而言之&#xff0c;这些漏洞允许恶意的Chrome扩展在你的电脑上运行…

2015年-2017年 计算机技术专业 程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析

文章目录 20151.C语言算法设计部分2.数据结构算法设计部分 20161.C语言算法设计部分2.数据结构算法设计部分 2017年1. C语言算法设计部分2.数据结构算法设计部分 2015 1.C语言算法设计部分 int total(int n) {if(n1) return 1;return total(n-1)n1; } //主函数测试代码已省略…

Android 15 推出新安全功能以保护敏感数据

Android 15 带来了增强的安全功能&#xff0c;可保护您的敏感健康、财务和个人数据免遭盗窃和欺诈。 它还为大屏幕设备带来了生产力改进&#xff0c;并对相机、消息和密钥等应用进行了更新。 Android 防盗保护 Google 开发并严格测试了一套全面的功能&#xff0c;以在盗窃之…

Ubuntu22.04 制作系统ISO镜像

第一步&#xff1a;安装软件-Systemback 1.如果已经添加过ppa&#xff0c;可以删除重新添加或者跳过此步 sudo add-apt-repository --remove ppa:nemh/systemback 2.添加ppa 我是ubuntu20&#xff0c;但这个软件最后支持的是 ubuntu16.04版本&#xff0c;所以加一个16版本…

【Docker】Harbor 私有仓库和管理

目录 一、搭建本地私有仓库 二、harbor简介&#xff08;特性、构成、架构的数据流向&#xff09; 2.1 什么是Harbor 2.2 Harbor的特性 2.3 Harbor的构成 2.4 Harbor的工作原理&#xff08;运行流程&#xff09; 三、harbor部署以及配置文件 1. 部署 Docker-Compose 服…

2010年国赛高教杯数学建模B题上海世博会影响力的定量评估解题全过程文档及程序

2010年国赛高教杯数学建模 B题 上海世博会影响力的定量评估 2010年上海世博会是首次在中国举办的世界博览会。从1851年伦敦的“万国工业博览会”开始&#xff0c;世博会正日益成为各国人民交流历史文化、展示科技成果、体现合作精神、展望未来发展等的重要舞台。请你们选择感兴…

Hadoop生态圈三大组件:HDFS的读写流程、MapReduce计算流程、Yarn资源调度

文章目录 1. HDFS的读写流程1.1 HDFS读流程1.2 HDFS写流程 2. MapReduce计算流程3. Yarn资源调度一、客户端请求资源二、Resource Manager处理请求三、任务资源计算与申请四、Resource Manager分配资源五、Node Manager执行任务六、任务执行与监控 1. HDFS的读写流程 1.1 HDFS…

C++ 中的友元(Friend)用法详解

什么是友元&#xff08;Friend&#xff09;&#xff1f;&#x1f46d; 友元 (C) | Microsoft Learn 在C中&#xff0c;友元&#xff08;Friend&#xff09;是一种机制&#xff0c;允许外部函数或类访问某个类的私有&#xff08;private&#xff09;或保护&#xff08;protecte…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十五集:制作更多地图,更多敌人,更多可交互对象

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、第一个代表性场景 1.制作更多敌人2.制作更多可交互对象二、第二个代表性场景 1.制作更多敌人2.制作更多可交互对象三、第三个代表性场景 1.制作更多敌人2.制…

【计算机网络 - 基础问题】每日 3 题(五十二)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Solr5.5.0单机部署

Solr5.5.0集成Tomcat8部署 1、 准备条件 JDK1.7以上 Solr5.5.0部署包&#xff08;solr-5.5.0.zip&#xff09; Tomcat8部署包 &#xff08;apache-tomcat-8.5.16.tar.gz&#xff09; 上传Solr5.5.0和tomcat8 部署包并解压使用 2、准备部署 将./solr-5.5.0/server/solr-we…

SPI的学习

工作原理 SPI的工作原理基于主从架构。主设备通过四条主要信号线与一个或多个从设备进行通信&#xff1a; MOSI&#xff08;主输出&#xff0c;从输入&#xff09;DI&#xff08;Master Output Slave Input&#xff09;&#xff1a;主设备发送数据到从设备。MISO&#xff08;…

MySQL 回收表碎片实践教程

前言&#xff1a; 在 MySQL 数据库中&#xff0c;随着数据的增删改操作&#xff0c;表空间可能会出现碎片化&#xff0c;这不仅会占用额外的存储空间&#xff0c;还可能降低表的扫描效率&#xff0c;特别是一些大表&#xff0c;在进行数据清理后会产生大量的碎片。本篇文章我们…

MAC电脑的JDK、MAVEN配置及IDEA激活

1、JDK配置环境 vim ~/.bash_profile # 添加 Java 目录&#xff0c;类路径和指令路径的配置&#xff0c;若已存在则用目标值覆盖 export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/…

Oracle单实例静默安装

oracle 11g单实例静默安装 在CentOS上静默安装Oracle数据库 引言 在企业环境中&#xff0c;自动化和标准化是提高效率的关键。静默安装&#xff08;也称为无人值守安装&#xff09;是一种无需人工干预的安装方法&#xff0c;适用于大规模部署或需要重复安装的场景。本文将介…

【KEIL那些事 4】CMSIS缺失!!!!导致不能编译!!!!软件自带芯片下载缓慢!!!!!!快速下载芯片包!!!!!

安装了keli发现emmm&#xff0c;CMSIS缺失&#xff01;&#xff01;&#xff01;&#xff01;不能编译&#xff0c;&#xff0c;&#xff0c;自带下载芯片缓慢&#xff0c;&#xff0c;&#xff0c;官网下载emmm&#xff0c;竟然不带动的&#xff01;&#xff01;&#xff01;&…