前面逻辑控制器的笔记中我们有用到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时,打印出姓名年龄和成年人。
执行结果如下:
可以看出和我们的预期结果是一样的。
阿里云超低折扣活动再度来袭: