当前位置: 首页 > 测试知识 > 用JMeter进行数据库性能测试:JDBC请求取样器实操
用JMeter进行数据库性能测试:JDBC请求取样器实操
2026-07-28 作者cwb 浏览次数20

使用JMeter的JDBC请求取样器进行数据库性能测试,可以模拟高并发场景下的SQL执行效率是后端压测的步骤


1. 环境准备:放置数据库驱动

JMeter 不自带具体数据库的 JDBC 驱动,需手动下载并放入 lib 目录(推荐直接放 lib,也可放 lib/ext)。

MySQL:下载 mysql-connector-java-xxx.jar

PostgreSQL:下载 postgresql-xxx.jar

Oracle:ojdbc8.jar 等

放置后必须重启 JMeter,驱动才会生效。


2. 创建测试计划和线程组

右键测试计划 - 添加 - 线程(用户) - 线程组

设置线程数(并发用户)、Ramp-Up 时间、循环次数等,模拟压测场景。

3. 配置JDBC连接池

线程组内右键 - 添加 - 配置元件 -JDBC Connection Configuration


参数详解:

Variable Name for created pool:mydb (连接池变量名,后续 JDBC 请求要引用)

Database URL:jdbc:mysql://192.168.1.100:3306/mydb?useSSL=false&serverTimezone=UTC

JDBC Driver class:com.mysql.cj.jdbc.Driver (根据数据库选择)

Username / Password:数据库用户名和密码


连接池设置:

Max Number of Connections:池中最大连接数,建议 ≥ 并发线程数,避免等待

Max Wait (ms):获取连接超时时间,如 10000

Auto Commit:一般设为 true

Transaction Isolation:DEFAULT 即可

多个不同的数据库可配置多个连接池,用不同变量名区分。


4. 添加JDBC请求取样器

线程组内右键 - 添加 - 取样器 - JDBC Request


基本配置

Variable Name of Pool:填入上一步的变量名,如 mydb

SQL Query:填入要测试的 SQL 语句

Query Type:根据语句类型选择,会直接影响执行方式和结果处理


Query Type详解


Select Statement

执行单条 SELECT,返回结果集。适用于普通查询压测。


Update Statement

执行 INSERT / UPDATE / DELETE,返回受影响行数。适用于数据写入/更新压测。


Prepared Select Statement

使用 ? 占位符的预编译查询,需配合参数值和类型。可参数化、防注入、减少硬分析。示例:

SQL:SELECT * FROM users WHERE id = ? AND status = ?

Parameter values:${id}, 1

Parameter types:INTEGER, INTEGER


Prepared Update Statement

使用 ? 占位符的预编译更新,同样需要参数值和类型。如压测插入订单:

SQL:INSERT INTO orders (user_id, amount, order_time) VALUES (?, ?, ?)

Parameter values:${userId}, ${amount}, ${__time(yyyy-MM-dd HH:mm:ss,)}

Parameter types:INTEGER, DECIMAL, TIMESTAMP

参数值可用逗号分隔,支持 JMeter 变量或函数。参数类型必须和数据库列类型一致,常用:VARCHAR、INTEGER、BIGINT、DECIMAL、TIMESTAMP、DATE。如果省略类型,JMeter 会全部按 VARCHAR 处理,可能导致类型错误。


Callable Statement

调用存储过程,支持入参加出参。示例:

SQL:{call GetUserCount(?, ?)} (假设两个参数:入参状态,出参总数)

Parameter values:1, OUT

Parameter types:INTEGER, INTEGER

Commit / Rollback

手动控制事务,需要将 Auto Commit 设为 false。用于测试事务提交或回滚的性能。


Declare Statement

执行不返回结果的 DDL(如 CREATE TABLE),较少使用。


结果集处理

如果只做负载压测,不关心返回数据,可不设置 Result variable name,直接执行。

如果需要断言或提取返回值,可指定 Result variable name,如 myVar,然后通过后置处理器取值。


5. 处理查询结果和断言


提取列值

在 JDBC 请求中设置:

Variable names:id, name, email (逗号分隔,对应 SELECT 的列顺序)

执行后 JMeter 会生成 id_1、name_1、id_2… 等变量,可结合 ForEach 控制器 遍历多行,或直接使用 id_1 获取第一行第一列。调试时可添加 调试后置处理程序 查看所有变量。


添加响应断言

在 JDBC 请求上右键 - 添加 - 断言 - 响应断言。

测试方式可以检查响应数据中的受影响行数(如返回 1)或特定字符串。如果设置了 Result variable name,还可以用 BeanShell 断言编程判断,但一般响应断言已能满足需求。


6. 添加监听器观测性能

查看结果树:调试必备,可看到请求/响应数据和SQL异常信息

聚合报告:观察吞吐量(TPS)、平均响应时间、错误率

用表格查看结果:实时查看每次请求耗时


7. 执行和调优建议

连接池最大连接数必须 ≥ 并发线程数,否则线程会阻塞等待连接,导致TPS受限并可能超时。

对生产库压测必须谨慎,从低并发逐步增加,观察短板。

优先使用Prepared Statement,更真实模拟应用层行为,同时减少数据库硬分析。

测试写入场景时,注意数据量增长对索引的影响,可准备数据清理脚本。

如果参数化数据来自CSV,保证CSV文件不含列名行或已正确跳过,并在CSV Data Set Config中合理设置循环和结束方法。

按照以上流程就能完整地使用JDBC请求取样器对数据库进行性能压测了。


文章标签: 软件测试 测试工具 数据库测试 性能测试
咨询软件测试