二十一、JMeter实战-通过JDBC Request向数据库批量插入、删除数据

工作场景

做性能测试之前,一般要准备一些铺底数据,比如插入五万条数据;还有就是做接口测试,先进行数据初始化,先插入部分数据。
批量插入数据,要注意的点:

  1. 主键ID不能重复,可以利用随机函数解决
  2. 涉及到同时执行多条sql语句的,要在Database URL后加入:allowMultiQueries=true,表示允许批量操作数据;
  3. 在Query Type中选择Callable statement



遇到的问题:

  1. Can not issue data manipulation statements with executeQuery()

原因:这个报错是Query Type选择错导致的





  1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO
    提示语法错误,但是在Navicat中执行过该语句,确认没问题。

原因:Database URL中还要设置允许数据批量操作



  1. 插入的数据中文乱码

针对以上场景以及出现的问题,现在就拿一个实际例子来说明,具体的操作。



一、配置好JDBC Connection Configuration

按照前面的文档,配置好数据库连接配置,然后需要在Database URL后加入以下内容

?allowMultiQueries=true&characterEncoding=UTF-8

一个是用来大量数据操作,一个是设置字符集格式为:UTF-8



二、JDBC Request选择Callable statement

Query Type(SQL语句类型)包含了很多数据类型,下面讲解几个常用的数据类型

1、Select statement
这是一个查询语句类型;如果JDBC Request中的Query内容为一条查询语句,则选择这种类型。

2、Update statement
这是一个更新语句类型(包含insert和update),如果JDBC Request中的Query内容为一条更新语句,则选择这种类型。如果是每条sql语句之间用逗号隔开。

3、Callable statement
这是一个可调用语句类型,只要语法正确,任何语句,再多的条数都能支持,所以查询或者插入数据,进行多个sql语句操作,那么就要选择Callable statement。插入多条sql语句,则要现在Callable statement。

通过sql语句插入一个学校:

INSERT INTO `t_login_account` VALUES ('10208', '208', '10208', '8A0576BE2EF5CE5FF8C380CD910944B8', '2020-05-21 18:04:20', '20', null, '1', null);
INSERT INTO `t_school_info` VALUES ('208', 'test深圳208', null, '1', null, null, null, '1', '3', '1', '2020-05-26 08:00:00', '2020-08-31 08:00:00', null, null, null, null, '1', '', '10000', '2020-05-18 10:49:51', '10178', '2020-05-18 15:05:20', '1', '2020-05-26 08:00:00', '2020-08-31 08:00:00');
INSERT INTO `t_school_schooltype` VALUES ('208', '208', '1');

上面是插入单条数据,使用不方便,下面就行参数化


1.加一个随机变量

当然也可以使用jmeter的随机变量


设置一下随机变量,记好变量名



2.JDBC Request中引用变量

变量的引用要根据实际情况,自己先要搞清楚数据表之间的联系,以及每个字段的意思,一般主键id进行随机。一下sql语句就是进行插入数据的参数化。

INSERT INTO `t_login_account` VALUES ('10${id}', '${id}', '10${id}', '8A0576BE2EF5CE5FF8C380CD910944B8', '2020-05-21 18:04:20', '20', null, '1', null);
INSERT INTO `t_school_info` VALUES ('${id}', 'test深圳${id}', null, '1', null, null, null, '1', '3', '1', '2020-05-26 08:00:00', '2020-08-31 08:00:00', null, null, null, null, '1', '', '10000', '2020-05-18 10:49:51', '10178', '2020-05-18 15:05:20', '1', '2016-05-26 08:00:00', '2016-08-31 08:00:00');
INSERT INTO `t_school_schooltype` VALUES ('${id}', '${id}', '1');

3.线程组中设置循环次数

当然也可以连接csv进行读取数据,在引到执行sql语句这里。



三、删除数据

原理差不多都一样,要删除刚才新建的数据


使用场景:插入一个学校,然后对该学生进行一系列操作,最后清理数据
原文地址:https://www.cnblogs.com/wwho/p/14299770.html