Jmeter之链接数据库:JDBC Connection Configuration+JDBC Request+获取数据的使用+循环控制器+计数器

174 阅读1分钟

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都是提取出来的数据

在这里插入图片描述

\