mysql存储过程构造性能测试数据

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql存储过程构造性能测试数据相关的知识,希望对你有一定的参考价值。

前言

通常在性能测试过程中,我们需要根据不同的业务场景构造测试数据,比如我们要压测下单的接口,那么我们需要大量的注册用户,通常我们可以直接去调用接口创建测试用户,当然我们也可以直接通过sql往数据库插入数据。

mysql存储过程构造用户数据

接口直接创建数据相信对大家来说都非常简单,下面我们来看一下,如果通过sql构造数据。
首先,我们先来看一下插入注册用户的sql,这是一条非常简单的insert语句。

  INSERT INTO es_member(
      parentid ,
      lv_id ,
      uname ,
      email ,
      PASSWORD ,
      regtime ,
      NAME ,
      sex ,
      advance ,
      point ,
      mp ,
      lastlogin ,
      registerip ,
      recommend_point_state ,
      info_full,
      midentity
    )
    VALUES
      (
        0 ,
        1 ,
        'testfan_2' ,
        'testfan_2@qq.com' ,
        'e10adc3949ba59abbe56e057f20f883e' ,
        1504404027 ,
        'testfan' ,
        0 ,
        0.00 ,
        55 ,
        55 ,
        1504403027 ,
        '192.168.1.111' ,
        0 ,
        0 ,
        0
      );

但是下面我们可以看到像用户名、邮箱这一类的数据,对于我们的业务而言,他们必须是唯一的,插入重复的数据显然是不合理的,下面我们可以通过创建存储过程,通过函数来实现我们的需求。


下面我们可以通过新建函数,来实现我们的需求,见如下代码:

BEGIN

  # 定义变量i,并且设置默认值为0
  DECLARE i INT DEFAULT 0;
  # 定义用户名变量
  DECLARE user_name VARCHAR(20);
  # 定义邮箱变量
  DECLARE user_email VARCHAR(20);
  # 定义性别变量
  DECLARE user_sex INT;

  # while循环 10000次,构造1w个用户
  WHILE i<10000 DO
  
  	# 使用 CONCAT 函数,实现字符串相加
    SET user_name = CONCAT('test_', i);
    SET user_email = CONCAT('test_',i,'@qq.com');

	# 判断当 i 为奇数时, 则为女用户
    IF i%2 = 0 THEN
      SET user_sex = 0;
    # 判断为偶数时,则为男用户
    ELSE 
      SET user_sex = -1;
	# 这里 if 条件判断之后,需要加上DO IF
    END IF;

    
    INSERT INTO es_member(
      parentid ,
      lv_id ,
      uname ,
      email ,
      PASSWORD ,
      regtime ,
      NAME ,
      sex ,
      advance ,
      point ,
      mp ,
      lastlogin ,
      registerip ,
      recommend_point_state ,
      info_full,
      midentity
    )
    VALUES
      (
        0 ,
        1 ,
        # 设置变量名
        user_name ,
        user_email ,
        'e10adc3949ba59abbe56e057f20f883e' ,
        1504404027 ,
        user_name ,
        user_sex ,
        0.00 ,
        55 ,
        55 ,
        1504403027 ,
        '192.168.1.111' ,
        0 ,
        0 ,
        0
      );
      # 这个和while循环一下,每次循环都要+,否则会进入死循环
    SET i = i + 1;
  END WHILE;

END

执行上方的函数,我们来看看数据库插入的数据,我创建了5个用户,可以看到都数据都创建成功了。

以上是关于mysql存储过程构造性能测试数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程实现同时多表写入,构造创建商品数据

利用存储过程生成大量的数据(oracle,mysql)

性能测试流程

oracle/MySQL构造数据的存储过程

存储过程制造数据

MySQL快速生成本地测试数据