测试准备:
1,安装MYSQL数据库。
2,安装Navicat Premium数据库管理工具 。
3,准备连接MySQL的jar包 mysql-connector-java-8.0.11.jar 。
4,有一个数据库HttpRunner,下面有三张表,以teacher表为例。
![62e7033e5c2d137f40c7c507ea5e6d64.png](https://img-blog.csdnimg.cn/img_convert/62e7033e5c2d137f40c7c507ea5e6d64.png)
在JMeter中添加jar包
方法1:直接将jar包复制到JMeter的lib目录下。
方法2:在 测试计划中添加。
![9491121ceb224753a57f29ea4255c845.png](https://img-blog.csdnimg.cn/img_convert/9491121ceb224753a57f29ea4255c845.png)
JDBC Connection Configuration
JMeter 添加配置元件JDBC Connection Configuration 。
配置数据库连接的相关属性 如连接名 密码 等。
![dfc3fb6e463c1e7b664ac3d08fe086f7.png](https://img-blog.csdnimg.cn/img_convert/dfc3fb6e463c1e7b664ac3d08fe086f7.png)
![2b26e2d54d49e22a336260ea89301e20.png](https://img-blog.csdnimg.cn/img_convert/2b26e2d54d49e22a336260ea89301e20.png)
JDBC Requst
这个Sampler可以向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据进行操作。
![1b929bf206e154b8f6f687e3a8f5ce2e.png](https://img-blog.csdnimg.cn/img_convert/1b929bf206e154b8f6f687e3a8f5ce2e.png)
示例1:从数据表teacher中查询出subjectid为1的所有老师的姓名,在HTTP请求中用该变量请求。
1.JDBC Request,这里就用到了connection中的mysqltest
![15dcb0f444e24cc8f1402415ddbbfbac.png](https://img-blog.csdnimg.cn/img_convert/15dcb0f444e24cc8f1402415ddbbfbac.png)
JDBC Requst 参数 说明:
Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致
Query:sql语句
Parameter valus:参数值
Parameter types:参数类型,可参考:Javadoc for java.sql.Types,如integer、varchar
Variable names:保存sql语句返回结果的变量名
Result variable name:创建一个对象变量,保存所有返回的结果
Query timeout:查询超时时间
Handle result set:定义如何处理由callable statements语句返回的结果
Query Type有几种,常用:
Prepared Select Statement:查询
Prepared Update Statement:插入、修改、删除
Variable names:如果设置了这个值,会保存sql语句返回的数据和返回数据的总行数。添加一个Debug Samplar来看下输出的结果就明白了,如下:
2、运行结果
![412eaf4070e72ee4a5b292bdb23fb601.png](https://img-blog.csdnimg.cn/img_convert/412eaf4070e72ee4a5b292bdb23fb601.png)
![5e0853aca77b3b50b85bbf30fd631cc6.png](https://img-blog.csdnimg.cn/img_convert/5e0853aca77b3b50b85bbf30fd631cc6.png)
可以看到Debug Sampler中的响应
A_#,B_#都代表行数
A_1:表示查询结果第1行第1列
A_2:表示第第2行第1列
B_1:表示第1行第2列
B_2:表示第2行第2列
3、HTTP请求,模拟请求,只是看下请求的URL
使用的时候用${变量名}
![812f2c108915a9e55cff9c7ea312941a.png](https://img-blog.csdnimg.cn/img_convert/812f2c108915a9e55cff9c7ea312941a.png)
![abfb01d77a7592b16446f0b493140dd4.png](https://img-blog.csdnimg.cn/img_convert/abfb01d77a7592b16446f0b493140dd4.png)
示例2:在示例1的基础上,将从mysql查询出来的数据保存到本地,再使用
因为示例1查询出来的结果不只一个,想保存到本地,再用CSV引用文件
1、保存到本地
首先可以把JDBC请求放在仅有一次控制器中,因为查询保存只需要一次
获取相应的数据:columnValue=vars.getObject("tname").get(i).get("teacher_name");
![4ef20aa1a9cac7faf1c15dff41d24efc.png](https://img-blog.csdnimg.cn/img_convert/4ef20aa1a9cac7faf1c15dff41d24efc.png)
import
2、CSV引用文件使用
![3ec4ba7ce1eba26342e1eeec45580f3d.png](https://img-blog.csdnimg.cn/img_convert/3ec4ba7ce1eba26342e1eeec45580f3d.png)
示例3:在性能测试过程中经常需要批量造数,试着来实现一下
造数的目的有时候是需要按较严格的规则,有时候就只是简单的增加表的容量。
![b7171cb19a2d88aae75630cdc577b25e.png](https://img-blog.csdnimg.cn/img_convert/b7171cb19a2d88aae75630cdc577b25e.png)
这里用到Query Type为Prepared Update Statement,写过java JDBC就很容易理解,语句里面的问号是占位符,这里我用了3个变量,其中${__counter(False,test)},${__Random(1,5,ran)}是JMeter的常用函数,可通过函数助手添加;${teachername}是外部导入的文件变量,通过配置元件CSV数据文件实现。
之后查看数据表可以看到数据添加进来了。所以可以通过这种方式开几个线程往数据库添加数据,还可以写java函数生成数据再往数据库添加。