参考博文:
/wuzm/p/10862904.html
/qmfsun/p/5912532.html
一.环境准备-数据库压力测试
a、jmeter5.1.1版本最新版本,可以去网页下载:/download_jmeter.cgi
b、jdbc驱动:
jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连接失败报错)
我这里下载的是 mysql-connector-java-8.0.19.jar
准备好驱动包后,按照如图进行设置:
点击测试计划-->点击浏览-->选中mysql驱动jar包-->打开
c、在测试计划下,把JDBC驱动包添加上,也可以将驱动包放入jmeter的lib目录下,即可自动加载。
二.操作步骤
新建一个线程组→添加配置元件---JDBC Connection Configuration(连接数据库组件)→
添加取样器→JDBC Request(JDBC请求)
JMeter如果进行JDBC请求,
请求后的响应结果如何给下一个请求用(也就是传说中的关联)
1.添加 "JDBC Connection Configuration"里面用来配置一些数据库连接的信息
JDBC Connection设置创建数据库连接(供JDBC Request Sampler使用)
1)Variable Name Bound to Pool:数据库连接池的变量名。 需要唯一标识。与JDBC取样器中的相对应,决定JDBC取样的配置。
原理:JDBC request可以通过选择不同的连接池名来选择不同的数据库连接。
VariableName变量名称:与JDBC Request的Variable name保持一致,因为链接数据库是需 要在JDBC Connection Configuration中配置好的,
然后赋予一个变量名称,那么JDBCRequest想要去访问数据库,就必须通过这个配置好的元件去连接,
所以JDBCReques就需要通过读取JDBC Connection Configuration的变量中的信息。
Variable Name:连接池绑定的jmeter变量的名称,自定义填写,必须与JDBC连接配置的“变量名称”字段一致。
比如JDBC Connection Configuration里面的Variable Name是jdbc_config
那么在写JDBC请求时,需要填写的Variable Name就必须是jdbc_config!!!
Validation Query:验证查询,不同版本的填写格式可能不同(比如3.1是Select 1,2.6是Select1),格式错误会报错。最新的Jmeter5.1.1下拉框可选择。
2 ) Connection Pool Configuration 连接池配置参数如下
a. Max Number of Connections: 该数据库连接池的最大连接数,一般可设置为0,意思是每个线程都使用单独的数据库连接,线程之间数据库连接不共享,在大多数情况下,将其设置为0,这意味着每个线程将得到它自己的池,其中只有一个连接,即线程之间不共享连接。如果您真的想要使用共享池(为什么?),那么将max count与线程数相同,以确保线程不会相互等待。
b. Max Wait(ms)}: 在连接池中取回连接最大等待时间,在查询过程中, 超过设置的值,连接池会抛出错误
c. Time Between Eviction Runs (ms)疏散时间,数据库空闲清理的间隔时间
d. Auto Commit自动提交。有三个选项,true、 false、编辑(自己通过imeter提供的函数设置)
Transaction lsolation:
事务间隔级别设置,主要有如下几个选项:
[TRANSACTION NODE]事务节点
TRANSACTION READ UNCOMMITTED事务未提交读
TRANSACTION READ COMMITTED事务已提交读
TRANSACTION SERIALIZABLE事务序列化
DEFAULT默认
TRANSACTION REPEATABLE READ事务重复读
3) Connection Validation by Pool
这是Jmeter用来检验数据库连接是否有效的一种机制,超过5秒没有使用的话,就会用validation query去测试下这个连接是否有效
1、Test While ldle 当空闲的时候测试连接是否断开,测试连接池的空闲连接,验证查询将会被使用去测试。
2、Soft Min Evictable Idle Time(ms) :最少的时间连接可能在池中闲置,然后才有资格被闲置的对象驱逐出去,额外的条件是至少在池中保持连接。默认值为5000(5秒)
4)Database Connection Configuration
a. Database URL:数据库服务器地址。如jdbc:mysql://localhost:3306/test 表示本地数据库,3306端口,数据库名称为test
如果想执行多条语句可以使用(allowMutiQueries-true表示在JDBC中执行多条Selec语句)
可配置如下:
jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
jdbc:mysql://{ip}:{port}/{dbname}?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
useUnicode=true 使用Unicode编码格式(字符集编码格式)
characterEncoding=utf8 使用UTF-8解码(字符集编码格式)
allowMultiQueries=true 允许多个query一起使用(1个请求中添加多个sql语句)
b. JDBCDriver Class:据库IDBC驱动类 名i com.mysaLjdbc.Driver.3、Username:数据库用户名root
c. password: 数据库密码(注意,是明文)
请求中执行多条sql的关键两步
1. 【JDBC Connection Configuration 】在配量DataBase URL的时候,加上allowMultiQueries-true参数如:jdbc:mysq://192 168 0.183:3306/mysql?allowMultiQueries=utrue
2. 【JDBC Request】 在jdbc请中, QueryType一定要选择Callable statement,使用Callablestatement时, 一次可以包含多个SQL,但非结尾的SQL要加“;”
2.添加一个“CSV Data Set Config”,用来在后续的JDBC请求中select语句中where条件参数化使用
user_ids这个字段我们将使用参数化,参数化的值也是从数据库中拷贝出来的
这样使用查询语句的话才会成功。
3.添加JDBC请求
Query Type:
上面这里如果不是很清晰的话,可以参考
/yiyaxuan/p/12367848.html 这里我分别举例子实际操作附有截图。
4.请求测试可以发现jdbc请求已经成果,并能在响应数据中看到返回的结果
5.那么接下来的问题就来了,如果我的下一个请求,需要JDBC中的请求,那我该怎么得到JDBC中的响应数据呢?
在JMETER中可以使用“正则表达式提取 器”来实现,那么怎么来实现呢,需要在jdbc请求后面添加一个后置的“正则表达式提取器”(表达式中的关键部分是 ([^"]+) ),添加的表达式如下
6.为了验证是否能正确取得jdbc中的响应结果数据,模拟添加了一个简单的http请求
7.http请求的“查看结果树”中可以看到成功的取得的user_id的信息
多说几句,如果SQL语句写成 select 'user_id='|| '"' || user_id ||'"' from sys_user b where b.USER_ID='13707'的形式,则可以通过下面的正则表达式来取到user_id=后面的内容,正则表达式为:user_id=" (.+?)"
配置完毕,接下来填写JDBC请求
Variable Name:与JDBC Connection Configuration中的Variable Name保持一致
Query Type:语句类型,查询用select,增删改用update,一起用可以选择callable
Query:填写对应的语句(这里用了一个简单的查询语句作为示例)