暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Jmeter实战如何利用JDBCrequest获取数据库中的值并提取作为下文中的入参

老李学习笔记 2021-04-27
4496
今天进行接口自动化测试时,在上下接口关联中需要查询数据库存储的验证码,于是就想到何不直接用JDBC request直接读取呢,方便简洁,还不用写接口了。
JDBC request是Jmeter中的一个取样器,可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作。需要和JDBC Connection Configuration配置元件(配置数据库连接的相关属性,如连接名、密码等)一起使用。
JDBC Connection Configuration的配置
1、下载数据库驱动(mysql-connector-java-X.xx.jar)放到Jmeter的lib路径下。不同的数据库有不同的驱动,可根据下表对照自己使用的数据库进行下载。

2、在线程组下添加配置元件JDBC Connection Configuration并配置相关参数
VariableName:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbcrequest中可以通过这个名称选择合适的连接池进行使用。
Max Numberof Connection:数据库最大链接数
MaxWait(ms):最大等待时间
timebetween eviction runs:运行时间间隔
Auto Commit:自动提交。有三个选项,true、false、编辑(自己通过jmeter提供的函数设置)
TransactionIsolation:事务间隔级别设置,设置默认即可
Test WhileIdle :当空闲的时候测试连接是否断开
Soft MinEvictable Idle Time(ms) :最少的时间连接可能在池中闲置,然后才有资格被闲置的对象驱逐出去,额外的条件是至少在池中保持连接。默认值为5000(5秒)
validationQuery:配置数据库时,属性validationQuery默认值为“select 1”,对于oracle值应为“select 1 from dual”。用来验证数据库连接的语句,这个语句至少是返回一条数据的查询语句。每种数据库都有自己的验证语句。大部分数据库都是select 1。
DatabaseURL: jdbc:mysql://服务器地址:3306/数据库名,不同的数据库DatabaseURL不一致,可根据自己使用的数据库自行选择,如上图。
JDBC Driverclass:数据库JDBC驱动类名:com.mysql.jdbc.Driver
Username:数据库连接用户名
password:数据库连接密码

配置完JDBC Connection Configuration后,就可以在需要的位置添加JDBCrequest获取值来配合自动化测试。如下图,在调用获取验证码接口之后,需将验证码作为校验验证码接口的参数传给后端,为了能让接口自动关联,需要我们在获取验证码之后添加一个JDBC request请求数据库取出验证码并返回,然后使用正则表达式提取返回数据中的验证码传入校验接口。

配置JDBC request

Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable NameBound Pool中的Variable Name名字保持一致
Query Type:此处支持方式多样,可以用于添加或者筛选数据,根据需要和Query配合使用;
Query:填写的sql语句,之前有文章说这里不要加”;”,老李也亲自进行了测试,加不加”;”都可以请求成功,并返回信息。(我用的Jmeter版本为3.2)

Parameter valus:数据的参数值
Parameter types:数据的参数类型
Variable names:保存sql语句返回结果的变量名,用于作为参数供调用
Result variable name:创建一个对象变量,保存所有返回的结果,供调用;
Query timeout:查询超时时间
Handle result set:定义如何处理由callable statements语句返回的结果。
在JDBC request请求下,添加正则表达式
截止到上一步就可以从数据库中取出需要的值,就算结束了,但是为什么我还要加上正则表达式的提取呢,因为这里着实让老李费了一把功夫,所以有必要说一说,首先我们看一下JDBC request的返回数据的显示方式。

他不像传统的Json格式返回那么规范,他其实是字段换行后显示的值,所以经过一番尝试在添加了“\n”换行符后才能成功。所以老李的正则是identifyingBuffer\n(\d{6})。如下图,可以正常取出验证码并作为下一接口的参数请求了。



文章转载自老李学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论