当前位置: 首页 > news >正文

JMeter JDBC请求Query Type实测(金仓数据库版)

文章目的

在实际性能测试中,JMeter的JDBC Request组件常用于模拟数据库操作。但许多用户对Query Type参数的具体行为存在疑惑。
本文将以金仓数据库KingbaseES为例,通过实测验证每种Query Type的行为,帮助用户明确其使用场景和限制,避免因配置不当导致测试结果失真。


一、测试环境准备

  1. JMeter配置

    • JMeter 5.3
    • JDBC驱动:kingbase8-9.0.0.jar(放置于jmeter/lib/ext目录)
  2. 数据库配置

    • KINGBASE (KingbaseES) V009R001C002B0014
    • 测试表结构:
      CREATE TABLE users (id SERIAL PRIMARY KEY,name VARCHAR(50),status VARCHAR(20) DEFAULT 'active'
      );
      insert into users(name) values ('user1');
      insert into users(name) values ('user2');
      
  3. JDBC连接配置

    • Variable Name: kingbase
    • Database URL: jdbc:kingbase8://192.168.17.12:54321/kingbase
    • JDBC Driver Class: com.kingbase8.Driver
    • 用户名/密码:根据实际填写 在这里插入图片描述

二、测试用例与实测过程

1. Select Statement
  • 测试目的
    验证执行多条SELECT语句时是否仅返回第一条结果。
  • 测试步骤
    1. 在JDBC Request中配置:
      • Query Type: Select Statement
      • SQL Query:
        SELECT * FROM users WHERE status='active';  -- 表中有2条active数据  
        SELECT * FROM users WHERE status='deleted'; -- 表中有1条deleted数据  
        
        数据库查询结果
        在这里插入图片描述
  1. 添加View Results Tree查看响应。

在这里插入图片描述
这里发现直接报错
在这里插入图片描述
删除查询语句后面的分号,只保留第1条查询语句
在这里插入图片描述
结果显示正常
在这里插入图片描述
后面如果再加sql语句,会因为没有分号报语法错误

结论 Select Statement仅可以执行一条SELECT语句


2. Update Statement
  • 测试目的
    验证执行多条DML语句时是否仅生效第一条。
  • 测试步骤
    1. 初始化数据:清空users表,插入一条数据:INSERT INTO users (name) VALUES ('test_user');
      在这里插入图片描述

    2. 配置JDBC Request:

      • Query Type: Update Statement
      • SQL Query:
        UPDATE users SET name='updated_user' WHERE id=1;  
        DELETE FROM users WHERE id=1;  
        

在这里插入图片描述 在这里插入图片描述

  1. 执行后检查数据库数据。
  • 执行结果

    • 语句全部执行成功
  • 结论
    Update Statement可以执行多条DML语句。


3. Callable Statement
  • 测试目的
    验证是否支持执行多语句或调用存储过程。
  • 测试步骤
    1. 创建PostgreSQL存储过程:
CREATE OR REPLACE PROCEDURE reset_users() AS 
BEGIN
UPDATE users SET name='default';  
DELETE FROM users WHERE status='deleted';  
END;   
 2. 配置JDBC Request:  - Query Type: `Callable Statement`  - SQL Query:  ```sqlcall reset_users();  -- 调用存储过程  SELECT * FROM users;    -- 查询结果  

在这里插入图片描述

执行前数据
在这里插入图片描述
3. 执行后检查数据库状态及响应数据。

  • 执行结果

    • 存储过程成功执行,所有用户name被重置为default
    • 响应数据中返回SELECT查询结果。
      在这里插入图片描述
  • 结论
    Callable Statement支持多语句和存储过程调用。


4. Prepared Select Statement
  • 测试目的
    验证参数化查询是否生效,并支持重复执行。

  • 测试步骤

    1. 配置JDBC Request:
      • Query Type: Prepared Select Statement
      • SQL Query: SELECT * FROM users WHERE id=?;
      • Parameter Values: ${__Random(1,5)}
      • Parameter Types: INTEGER
    2. 使用${__Random(1,5)}动态生成id值,循环执行2次。
    3. 检查每次查询是否返回匹配结果。
      在这里插入图片描述
  • 执行结果

    • 每次均能根据动态id值返回对应数据(若存在)。
      在这里插入图片描述
      在这里插入图片描述
  • 结论
    Prepared Select Statement支持参数化,提升重复查询性能。


5. Commit与Rollback
  • 测试目的
    验证手动提交与回滚事务的功能。

  • 测试步骤
    添加配置:
    第一个JDBC Request:AutoCommit(false)
    sql
    INSERT INTO users (name) VALUES (‘temp_user’);
    第二个JDBC Request:Rollback
    执行后检查数据库是否插入数据。

  • 执行结果
    执行后数据库无temp_user数据,回滚生效。

  • 结论
    通过Commit和Rollback可手动控制事务。


三、实测总结

Query Type支持多语句适用场景注意事项
Select Statement单次SELECT查询仅首条生效
Update Statement✔️多次INSERT/UPDATE/DELETE
Callable Statement✔️存储过程、多语句操作语法需符合数据库规范
Prepared Statement参数化重复查询或更新必须定义参数类型
Commit/Rollback-手动事务控制需先关闭AutoCommit

通过本次实测,可明确不同Query Type的行为差异。建议在性能测试中优先使用预编译语句(Prepared Statement)提升效率,并合理利用事务控制保证数据一致性。

http://www.xdnf.cn/news/593731.html

相关文章:

  • springboot3+vue3融合项目实战-大事件文章管理系统-本地存储及阿里云oss程序集成
  • 一文读懂Agent智能体,从概念到应用—Agent百科
  • GTM4.1-SPE
  • spring+tomcat 用户每次发请求,tomcat 站在线程的角度是如何处理用户请求的,spinrg的bean 是共享的吗
  • 练习写作对口语输出有显著的促进作用
  • Zephyr OS 中的互斥信号量
  • 高等数学-微分
  • SDWebImage源码学习
  • 容器资源绑定和查看
  • 中医方剂 - 理中汤
  • 车载网关策略 --- 车载网关重置前的请求转发机制
  • HarmonyOS学习——UIAbility组件(上)
  • 有监督学习——决策树
  • 咬合配准算法文献推荐
  • 机器学习圣经PRML作者Bishop20年后新作中文版出版!
  • Apollo10.0学习——planning模块(10)之依赖注入器injector_
  • 交换机工作原理解析与网络安全实践
  • 4个关键功能,让健康管理系统真正发挥作用
  • 基于Java的体育场馆预约系统的设计与实现【附源码】
  • Web3.0:下一代互联网的变革与机遇
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取目标App的程序图标?
  • 论文解读 | 《桑黄提取物对小鼠宫颈癌皮下移植瘤的抑制及机制研究》
  • 深入理解线程池:参数、流程与实战应用
  • 【C++进阶篇】红黑树的实现(赋源码)
  • SIL2/PLd 认证 Inxpect毫米波安全雷达:3D 扫描 + 微小运动检测守护工业安全
  • 多旋翼无人机架空输电线路自动化巡检方案
  • 从3.7V/5V到7.4V,FP6291在应急供电智能门锁中的应用
  • NV039NV044美光闪存颗粒NV047NV053
  • 论文解读 |《药用真菌桑黄化学成分的研究》
  • String.join()-高效字符串拼接