Jmeter 数据库连接方法

15 篇文章 0 订阅
13 篇文章 1 订阅

前面逻辑控制器的笔记中我们有用到csv文件做为参数文件,今天我们使用数据库来作为参数化数据来源,首先需要准备的数据表如下:

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int(10) DEFAULT '0',
  `sex` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'tom', '15', 'm');
INSERT INTO `user` VALUES ('2', 'jerry', '18', 'm');
INSERT INTO `user` VALUES ('3', 'marry', '20', 'w');
INSERT INTO `user` VALUES ('4', 'jack', '34', 'm');
INSERT INTO `user` VALUES ('5', 'lisa', '14', 'w');
INSERT INTO `user` VALUES ('6', 'tony', '8', 'm');
INSERT INTO `user` VALUES ('7', 'darling', '12', 'm');

一、JDBC数据库连接

1.在Jmeter的线程组中分别添加JDBC Connection ConfigConfiguration、JDBC Request、Debug Sampler、查看结果树,如图:

 

2.JCBD连接设置:

        首先,需要在测试计划中将连接mysql需要的包加到classpath中,如图:

       

         接下来,在JDBC Connection Configuration 中添加JDBC的配置,如图:

这里特别说明一下以下配置:
DatabaseURL:jdbc:mysql://localhost:3306/jmeter_test?serverTimezone=Hongkong&useSSL=false 
    前部分jdbc:mysql:为mysql固定写法;
    localhost:3306是我的数据库地址和端口号;
    jmeter_test是连接的数据库名称;
    问号后面的是一些连接时的参数,这个根据具体配置添加
JDBC Driver class :com.mysql.jdbc.Driver
    这个是mysql数据库连接的驱动,为固定写法。
Username和Password是数据库的用户名密码。

3.JDBC 请求设置

在JDBC Request中设置如下:

我们这里查询出所有用户的name。

 

4.执行结果

执行之后,结果如下:

 

在这里我们需要关注的是Debug Sampler中的内容,如图:可以看出,返回的结果是一个List列表,name_#=7表示一个有7条name数据,分别为name_1,name_2...name_7。那么我们假设有这样一个场景,我们需要根据不同的年龄段来执行不同的动作,而返回结果的格式和我们上一篇写的ForEach格式相同,所以我们可以使用ForEach来遍历查询到的结果。

 

二、参数化

 

首先,添加ForEach控制器,配置如图:

 

我们遍历所有的name,然后在ForEach中再添加一个JDBC Request,配置如下:这里面我们使用到了JDBC的另一个查询类型,Prepared Select statement 参数化查询。因为我们遍历出来的name不是固定值,所以这里使用参数化查询,使用“?”作为占位符,然后在下面“Parameter values”和“Parameter type”中填写参数和参数类型。

 

需要执行不同的动作自然少不了判断,所以在这里添加两个如果(If)控制器,用来判断年龄小于18和年龄大于18,如图:这里需要注意的是age我们写的是age_1,因为从上面查询name的时候我们可以看到,返回结果是以varName_num的格式来命名的,由于我们的数据表中name是唯一的,所以查到的结果必然只有一条,所以这里使用age_1。

 

然后在如果控制器中分别添加一个BeanShell,来打印出不同结果,如图:这个意思是,年龄小于18时,打印出来姓名年龄和未成年,年龄大于或等于18时,打印出姓名年龄和成年人。

 

执行结果如下:

可以看出和我们的预期结果是一样的。

 

阿里云超低折扣活动再度来袭:

新用户购买 >

老用户续费>

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值