• 二十一、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语句这里。



    三、删除数据

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


    使用场景:插入一个学校,然后对该学生进行一系列操作,最后清理数据
  • 相关阅读:
    c++------引用(左值与右值,引用一个数组,const限制)
    c++------智能指针,tuple多元数组
    c++中const和c中const区别
    c++新特性-------函数包装器,模板元加速
    c++新特性---lambda表达式
    c++新特性-收缩转换,二进制,constexpr,以及namespace&&inline
    Eureka 注册中心 和 Config中心 配置
    最近的日子-2019/8/12
    工作上的态度
    保持运动 对心情很重要
  • 原文地址:https://www.cnblogs.com/wwho/p/14299770.html
Copyright © 2020-2023  润新知