存储过程:就SQL语句集,它存储在数据库中。压力测试中,常用到数据构造。
需求:造10000个注册用户
不正经的解决方案:
1、手动页面注册(效率低)
2、让研发帮忙写个脚本造数据(现在忙,等会再说)
3、跟领导说我不会(容易被领导嫌弃,给领导留下不好印象)
正经解决方案
1、抓包找到注册接口,用自动化工具循环调注册接口(jmeter、postman等)
2、自己写代码完成(java、Python)
3、写一个存储过程(快速、方便)
存储过程分类
1、有返回值
2、无返回值
Mysql常用函数
CONCAT(str1,str2...):拼接多个字符串,如:select CONCAT(‘mtx_‘,1,‘it is good days‘);
RAND():获取一个0-1之间的小数 可以返回一个随机的小数,如:SELECT RAND();
如果想要返回一个1-100之间的整数,可以用RAND()*100,如:
SELECT RAND()*100;
FLOOR(X):取整,如:SELECT FLOOR(3.14),就会取整3,直接去了小数点后的数
SELECT FLOOR(3.14);
NOW():当前时间,格式yyyy-MM-dd HH:mm:SS
如:SELECT now();
存储过程的逻辑判断
while循环
while 条件 do
语句;
end while;
if判断
if 条件 then
语句;
else;
语句;
end if;
比如现在要在user表里插入一条用户数据,非常的容易,要是手动生成100、1000的用户数据,总不能每条数据都一样,没有实际意义,下面可以用到存储过程
创建表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) DEFAULT NULL,
`password` varchar(200) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` int(2) DEFAULT NULL,
`phone_num` varchar(11) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8
插入一条用户数据:
insert into user (user_name,password,age,gender,phone_num,email,create_time)
values(‘test1109‘,1234,18,1,13710065433,‘test@qq.com‘,NOW());
存储过程语句是在函数里写的
编写存储过程语句如下:
BEGIN
DECLARE i int DEFAULT 1;#定义i
DECLARE gender int;#定义gender的类型
while i<1000
DO
if i%2 THEN
set gender=0;
ELSE
set gender=1;
END if;
insert into user (user_name,password,age,gender,phone_num,email,create_time)values(CONCAT(‘test‘,i),‘123456‘,FLOOR(RAND()*100),gender,13710065433+i,CONCAT(‘test‘,i,‘@qq.com‘),NOW());
SET i=i+1;
END while ;
END;
执行完成花了2秒