『动善时』JMeter基础 — 42、JDBC Request组件详细介绍

目录

1、JDBC Request组件介绍

JDBC Request组件可以向数据库发送一个JDBC请求(发送SQL语句),它需要和配置元件中的JDBC Connection Configuration组件配合使用。

即:在使用JDBC Request组件时,必须设置一个JDBC连接配置元件,以提供连接的目标数据库。

2、JDBC Request组件界面详解

添加JDBC Request组件操作:选中“线程组”右键 —> 添加 —> 取样器 —> JDBC Request

JDBC Request组件的界面,如下图所示:

『动善时』JMeter基础 — 42、JDBC Request组件详细介绍

界面详细说明

  • 名称JDBC Request组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该JDBC Request组件的简短说明,以便后期回顾时查看。

(1)Variable Name Bound to Pool:绑定一个数据库的链接。

Variable Name of Pool declared in JDBC Connection Configuration:填写数据库连接池的名称。也就是填写与你需要调用的jdbc connection configuration组件中定义的变量名(Variable Name)保持一致。

(2)SQL Query:SQL查询

  • Query Type:选择SQL语句类型。不同形式的SQL语句,需要选择对应的SQL语句类型。(具体介绍看下面补充)
  • Query::里面填入查询数据库数据的SQL语句(填写的SQL语句时,单条SQL语句末尾不要加;,多条SQL语句需要加;

(3)第三部分内容

  • Parameter values:填写参数值。表示我们要添加到SQL中的数据(SQL语句中有占位符的时候使用),需要添加不同数据的时候,可以使用参数化。多个参数用逗号分隔。
  • Parameter types:填写上面数据的参数类型,与上面的参数一一对应。比如varchartinyint(m)smallint(m)等。填写多个类型的时候,用逗号分隔。
  • Variable names:保存SQL语句返回结果的变量名,与数据库字段对应,多个字段保存时,用逗号分隔。用于保存由Select语句、Prepared Select语句或CallableStatement返回的值(查询语句)。
    注意,当与CallableStatement一起使用时,变量列表的顺序必须与调用返回的OUT参数相同。如果变量名少于OUT参数,则只有指定变量名的部分能返回;如果存在更多的变量名,则多余变量将被忽略。
  • Result variable name:创建一个对象变量,保存所有返回结果。也就是定义用于存放select操作返回的查询结果集。
  • Query timeout:设置查询超时的时间。
  • Handle result set:定义如何处理由callable statements语句返回的结果。(在涉及存储过程的时候可能会用上)
    • Store As String(默认):所有变量都作为字符串格式进行存储。不会遍历ResultSet。
    • Store As Object:变量名称列表中的ResultSet类型的变量将被存储为对象。不会遍历ResultSet。
    • Count Records:结果集类型的变量将通过显示记录的计数作为结果进行迭代。变量将被存储为字符串。

说明:Parameter valuesParameter types:是成对出现的,且SQL语句中有多少个?,这里就必须有多少对参数键值对。假设SQL语句为select * from member where id=2,那么可以设置Parameter values${id}Parameter typesint

3、补充:Query Type类型说明

在JMeter的JDBC Request组件中,Query Type(SQL语句类型)包含十个类型,每个类型作用都不同。

(1)Select Statement(重点)

这是一个查询语句类型;如果JDBC Request中的Query内容为一条查询语句,则选择这种类型。

提示:

  1. 如果有多条查询语句(不带有占位符的情况下),可以放在一起顺序执行,每天SQL语句用分号分隔,且需要设置Query TypeCallable Statement
  2. 执行多条查询语句时,如果Query Type选择为Select Statement,只会执行第一条查询语句。
  3. 执行多条查询语句时,如果Query Type选择为Prepared Select Statement,也只会执行第一条查询语句。

前提:在JMeter中执行多条查询语句时,需要在JDBC Connection Configuration组件中配置Database URL添加?allowMultiQueries=true,例如:jdbc:mysql://127.0.0.1:3306/ecshop4?serverTimezone=GMT&allowMultiQueries=true。不填写,则会报错。

(2)Update Statement(重点)

这是一个更新语句类型,包含updateinsertdelete操作。如果JDBC Request组件中的Query内容为一条更新语句,则选择这种类型。

提示:

  1. 如果执行多条更新语句(不带有占位符的情况下),可以放在一起顺序执行,每天SQL语句用分号分隔。
  2. Query Type设置为Update StatementPrepared Update StatementCallable Statement都可以(亲测5.4.1版本)。
  3. 前提是Database URL添加了allowMultiQueries=true参数,如上。
  4. 如果添加中文乱码,则需要在Database URL添加characterEncoding=UTF-8参数。
  5. 如果多条语句中夹杂Select语句,则自动忽略。
  6. 多条语句中,若第一条语句为Select语句,则报错。

(3)Prepared Select Statement(重点)

Select Statement用于为一条SQL语句生成执行计划,如果只执行一条查询SQL语句,Select Statement是最好的类型。

Prepared Select Statement用于绑定变量重用执行计划,对于多次执行的SQL语句,Prepared Select Statement无疑是最好的类型生成执行计划极为消耗资源,两种实现速度差距可能成百上千倍。

提示:Prepared Select Statement的第一次执行消耗是很高的,它的性能体现在后面的重复执行。

总结:Prepared Select Statement是预编译的,对于批量处理可以大大提高效率。所以对于多条查询语句的执行,选择这个是最好的。

(4)Prepared Update Statement(重点)

Prepared Update StatementPrepared Select Statement的用法是极为相似的,具体可以参照前三种类型的关系。

(5)Callable Statement

这是一个可调用语句类型,Callable Statement为所有的 DBMS(数据库管理系统) 提供了一种以标准形式调用已储存过程的方法。

简单的理解:

  1. 也就是说如果需要调用存储过程就选这个这个类型。具体的使用,可以自行去拓展。
  2. Callable Statement语句类型,只要语法正确,任何语句,再多的条数都能支持。

(6)Commit

Commit的意思是:将未存储的SQL语句结果写入数据库表,而在JMeter的JDBC请求中,同样可以根据具体使用情况,选择这种Query类型。(无特殊情况,不推荐使用)

(7)Rollback

Rollback指的是:撤销指定SQL语句的过程,而在JMeter的JDBC请求中,同样可以根据需要使用这种类型。(无特殊情况,不推荐使用)

(8)AutoCommit(false)

MySQL默认操作模式就是AutoCommit自动提交模式。表示除非显式地开始一个事务,否则每条SQL语句都被当做一个单独的事务自动执行。

我们可以通过设置AutoCommit的值,改变是否执行自动提交模式。

AutoCommit(false)的意思是不执行自动提交模式,即将用户操作一直处于某个事务中,直到执行一条Commit提交或Rollback语句,才会结束当前事务,重新开始一个新的事务。

(9)AutoCommit(true)

这个选项的作用和上面AutoCommit(false)作用相反,即:无论何种情况,都自动提交将结果写入数据库,并结束当前事务开始下一个事务。

(10)编辑(${}

如果需实现同时多个不同用户使用不同的SQL,可以通过把整条SQL语句参数化来实现。

把SQL语句放在CSV文件中,然后在JDBC Request的Query中,使用参数化 ${SQL_Statement}代替。

参考:https://www.cnblogs.com/imyalost/p/6498029.html

上一篇:【APICloud系列|42】安卓应用和ios应用下载地址生成一个统一二维码的解决办法


下一篇:AcWing 第23场周赛