Jmeter之链接数据库:JDBC Connection Configuration+JDBC Request+获取数据的使用+循环控制器+计数器
JDBC Connection Configuration
Variable Name for created pool:这个要记住,因为这个组件只是配置了数据库的连接,而这个就是配置的名字,下一小节JDBC Request的时候还要用到这个字段
Validation Query :一个简单的查询,用于确定数据库是否仍在响应
默认情况下:
hsqldb:select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle:select 1 from dual
DB2:select 1 from sysibm.sysdummy1
MySQL:select 1
Microsoft SQL Server (MS JDBC driver):select 1
PostgreSQL:select 1
Ingres:select 1
Derby:values 1
H2:select 1
Firebird:select 1 from rdb$database
JDBC Request
最简单的查询
*注意:语句结尾不需要添加 ; *Query Type: 如果是像下面这种select * from test的,就用Select Statement
结果
使用参数化
使用?来做占位符
Parameter values:按照顺序替换使用?占用的地方
Parameter type:对应Parameter values的数据类型
易错点1:sql 中使用占位符时,Query Type 必须选择 Prepared Select Statement 或者 Prepared Update Statement !!!
易错点2:当参数化的对象为varchar的时候,在Parameter values对应的值上不要加引号!!!
易错点3:Parameter value、Parameter type 填写值的数量要保持一致,用英文,分隔 结果
使用变量
我们先添加一个用户参数,将需要的参数放进去 再去JDBC Request中使用 易错点1:当参数为varchar的时候,在SQL中需要使用''包起来
Variable Names
把DebugSampler打开 结果
可能这样看还不直观,那我们从数据库里对比一下
a #、b#、c #、d#:代表行数
a_1:第 1 行、第 1 列
b_2:第 2 行、第 2 列
c_3:第 3 行、第 3 列
d_3:第 3 行、第 4 列
Result variable name
结果
该变量是个数组,每一个元素代表一条记录
获取数据的使用
数据提取出来了,一般有两种场景
场景1:我需要这个手机号的验证码,需要的值是唯一的
场景2: 我要批量获取数据,比如手机号,然后批量发起请求
共同点是查询的结果都是一个变量的不同值,那我们修改一下JDBC Request
只用到一个参数
结果 然后修改一下查询接口的请求
注意点1:一定要将JDBC Request放前面,这样才可以取到值,如果放查询接口的后面,查询接口是没办法获取到值的
注意点2:通过${id_12}来取值,对应的是
结果
要用到N个参数
首先看一下整个布局 和结果 第一步修改一下JDBC Request,我们把结果放到Result里
然后新增一个循环控制器,循环次数为查询结果的条数
再加一个计数器,注意,计数器的初始值是0!!!!并且为计数器起一个引用名称
再加一个用户参数,起一个名字叫:every_id
{__BeanShell(vars.getObject("id_result").get({num}).get("id"))}
${__BeanShell()} :执行BeanShell脚本,一般比较短的脚本可以用此方法来写
id_result:是一个数组,即 JDBC Request 里的 Result variable name,每个元素的格式都是 {id=3072},就像下面这个Debug Sampler里的一样
${num}:上面计数器的值,每次递增 1,这里是数组下标的意思
总结起来就是
vars.getObject获取了JDBC Request的Result参数,通过get(${num})获取对应数组下标的一个参数,例如: {id=3072} ,再通过get("id")来获取id的值
最后,将查询请求放到循环控制器下,通过用户参数的参数名称:every_id来放到请求里
最后发起请求,检查结果,请求20次,每个orderId都是提取出来的数据
\