一、
压测数据的准备方式有哪些?
在执行压测脚本之前,我们通常要准备数据库存量数据,一般是以生产数据为依据成比例增加,少则需要上百万,多则需要上千万、上亿,经常有很多时间要花在造数据上。
目前常用的造数据方法有:
1、通过编程语言写代码,如用java、python等语言,用自己熟悉的语言写就行,灵活快速
2、用jmeter、loadrunner等压测工具,需要数据量较大时,此方法耗时较长
3、写数据库存储过程的方式,此方法简单快速
前几天工作中需要造一千万的存量数据(mysql数据库),我分别尝试了三种方法,接下来分别讲解供大家参考。
(因为篇幅和时间限制,本文先介绍存储过程方式,后续再介绍另外两种方式)
二、
mysql存储过程使用介绍
1、mysql存储过程基本语法
(1)创建存储过程:
如:
CREATE PROCEDURE p()
BEGIN
/*此存储过程的正文*/
END
MySQL 存储过程参数分为“in”、“out”、“inout”,如果不显式指定则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。此文中使用in类型的参数,不同参数类型的区别后续再找机会详解。
(2)调用存储过程:
# CALL加上过程名以及一个括号
# 例如调用上面定义的存储过程
CALL p();
(3)删除存储过程
DROP PROCUDURE p;
下面先看一个简单的例子:
这里我不详细讲了啊~
三、
mysql存储过程实战
下面说一下我用到的存储过程:
因为sql语句中需要用到随机数字和随机字符串,mysql中没有匹配的自带函数,所以先定义两个函数,如下:
上图中定义的函数rand_string作用是一个随机生成n个字符串,其中用到如下mysql的自带函数:
concat('a','b'):ab,连接a、b字符串,可以是多个字符参数
substring(str,pos,len):截取字符串,得到字符串str从pos位置开始长度为len的字符串;
Cast:显式类型转换,例如:CAST(int_col AS CHAR)--转换int类型变量为char类型字符
Floor(x)表示向下取整,只返回值x的整数部分,小数部分舍弃
rand():得到一个[0,1]的随机小数,其中rand()*52,此处的52指的是上面定义的chars_str的位数。
上图中定义的函数rand_num作用是随机生成一个int整数。
辅助函数准备好了,下面定义存储过程:
其中在插入sql语句时,使用的变量是调用了之前定义的函数后的结果。
---------------------
本文首发于本人原创公众号【媛测】(原名-玩转jmeter),专注分享性能、自动化测试等相关知识,寻找志同道合之士共同成长!扫码关注后分别回复jmeter、python、linux,领取个人总结资料。