您的位置:首页 > 数据库

『动善时』JMeter基础 — 44、JMeter对数据库的更新操作

2021-06-17 16:42 921 查看

目录
  • 5、注意事项
  • 提示

    关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了。因为配置数据库连是比较固定的步骤,这里就不重复讲解了。

    本篇文章主要详细说明,使用

    JDBC Request
    组件,如何对数据库进行更新的各种操作。

    JMeter中更新语句的操作步骤:

    1. 添加测试计划。
    2. 添加线程组,设置线程组的次数。
    3. 添加
      JDBC Connection Configuration
      组件,配置数据库连接。
    4. 添加
      JDBC Request
      请求,编写SQL语句,进行参数化。
    5. 运行脚本,发送SQL请求。
    6. 添加察看结果树,查看结果。

    说明:更新操作包含

    insert
    update
    delete
    三种操作,都是一样性质的,所以我们就以
    insert
    操作为例进行说明。

    1、执行一条insert语句

    使用JMeter发送一条

    insert
    语句非常的简单。

    JDBC Request
    组件中做如下操作:

    1. 选择数据库连接配置。
    2. 选择
      Query Type
      :因为是执行一条
      insert
      语句,所以选择
      Update Statement
      即可。
    3. 把完整一条
      insert
      语句,输入到
      Query
      文本框中。

    如下图所示:

    说明:这是最基础的

    insert
    操作,发送了一条固定的
    insert
    请求。

    2、insert语句实现参数化

    JMeter中在

    insert
    请求中实现参数化也非常的简单。

    JDBC Request
    组件中做如下操作:

    1. 选择数据库连接配置。
    2. 选择
      Query Type
      :因为是执行一条
      insert
      语句,所以选择
      Update Statement
      即可。
    3. 把完整一条
      insert
      语句,输入到
      Query
      文本框中。
    4. 把需要参数化的部分,替换成参数化变成的引用即可。

    使用函数助手为例进行演示,如下图所示:

    说明:其他形式的参数化也都可以,如利用CSV这个元件去做语句的参数化。本例中是用函数助手方便演示。

    提示:如果有些字段是自增长的值或者是有默认值,那么就可以不写,让其自动填充。

    3、一次执行多条insert语句

    使用JMeter发送一次执行多条

    insert
    语句非常的简单,就是直接写入多条
    insert
    语句,之间用
    ;
    分隔开。

    JDBC Request
    组件中做如下操作:

    1. 选择数据库连接配置。
    2. Database URL
      后增加一个参数
      allowMultiQueries=true
      ,才可以执行多条SQL语句(重点)。
    3. 选择
      Query Type
      :我们可以选择
      Update Statement
      Prepared Update Statement
      Callable Statement
      ,这三种类型语句都可以。
      选择
      Update Statement
      类型,执行一条
      insert
      语句发送一次请求。
      而选择
      Prepared Update Statement
      Callable Statement
      类型,则全程只发送一起请求。
    4. 把完整一条
      insert
      语句,输入到
      Query
      文本框中。

    如下图所示:

    4、使用Beanshell生成加密数据示例

    我们在更新数据库的时候,有时候会有部分数据直接插入是不可以的,需要加密处理。

    那么就可以使用BeanShell 取样器组件完成对数据的加密操作。

    然后把加密好的数据,存储到JMeter的线程变量中,方便进一步的引用。

    提示:加密代码,可以找开发要,也可以自己扒源码找。

    JMeter中更新有加密数据的操作步骤:

    1. 添加测试计划。
    2. 添加线程组,设置线程组的次数。
    3. 添加
      JDBC Connection Configuration
      组件,配置数据库连接。
    4. 添加BeanShell 取样器组件,编写加密算法,并把加密的数据存储到线程变量中。
    5. 添加
      JDBC Request
      请求,编写SQL语句,使用参数化,并引用加密的线程变量。
    6. 运行脚本,发送SQL请求。
    7. 添加察看结果树,查看结果。

    (1)测试计划内包含的元件

    添加元件操作步骤

    1. 创建测试计划。
    2. 创建线程组:
      选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
    3. 在线程组下,添加配置原件
      JDBC连接配置
      组件:
      选中“线程组”右键 —> 添加 —> 配置元件 —> JDBC Connection Configuration
    4. 在线程组下,添加取样器
      BeanShell 取样器
      组件:
      选中“线程组”右键 —> 添加 —> 取样器 —> BeanShell 取样器
    5. 在线程组下,添加取样器
      JDBC Request
      组件:
      选中“线程组”右键 —> 添加 —> 取样器 —> JDBC Request
    6. 在线程组下,添加监听器“察看结果树”组件:
      选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

    最终测试计划中的元件如下:

    点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

    (2)JDBC连接配置组件内容

    基本的JDBC连接配置,界 2c43 面内容详解可以看前面的文章【JMeter连接数据库】。

    主要是定义数据库连接池的名称,还有最下方关于数据库的基本信息配置。

    如下图所示:

    (3)BeanShell取样器界面内容

    把生成加密内容的BeanShell代码,写入到界面的脚本输入框中。

    如下图所示:

    完整代码放在下面:

    import java.io.PrintStream;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    public class PWDEncryptionUtils {
    
    // 静态方法,类直接调用
    // 对明文密码进行加密
    public static String encryptPwd(String pwd) {
    return stringMD5(pwd);
    }
    
    public static String stringMD5(String input) {
    try {
    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    byte[] inputByteArray = input.getBytes();
    messageDigest.update(inputByteArray);
    byte[] resultByteArray = messageDigest.digest();
    return byteArrayToHex(resultByteArray);
    } catch (NoSuchAlgorithmException localNoSuchAlgorithmException) {
    localNoSuchAlgorithmException.printStackTrace();
    }
    return null;
    }
    
    public static String byteArrayToHex(byte[] byteArray) {
    char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    char[] resultCharArray = new char[byteArray.length * 2];
    int index = 0;
    byte[] arrayofByte = byteArray;
    int j = byteArray.length;
    for (int i = 0; i < j; i++) {
    byte b = arrayofByte[i];
    resultCharArray[(index++)] = hexDigits[(b >>> 4 & 0xF)];
    resultCharArray[(index++)] = hexDigits[(b & 0xF)];
    }
    return new String(resultCharArray);
    }
    
    //    public static void main(String[] args) {
    //        PWDEncryptionUtils test = new PWDEncryptionUtils();
    //        String result = test.encryptPwd("12345678");
    //        System.out.println("result = " + result);
    //    }
    
    }
    
    //调用执行步骤
    
    // 1.创建实例
    PWDEncryptionUtils test = new PWDEncryptionUtils();
    
    // 2.调用加密函数
    String pwd=test.encryptPwd("${__RandomString(8,0123456789,)}");
    
    // 3.存储数据到JMeter线程变量中
    vars.put("new_pwd",pwd);

    说明一下:

    • 这里主要看最后的三行代码,使用函数助手生成的8位数字为数据,进行加密运算。
    • 然后存入到JMeter的线程变量中,变量名为
      new_pwd
    • 最后,后续的请求中可以引用该变量。

    提示:在调试BeanShell代码的时候,可以添加

    Debug Sampler
    组件来查看获取结果。

    如下图所示:

    (4)JDBC Request组件中内容

    填写应用的数据库连接池名称,然后编写

    insert
    语句,最后加入参数化和加密数据的引用。

    我把加密后的数据放在了

    slogan
    字段中了,如下图所示:

    (5)查看结果

    我把线程组中的线程数设置为3,也就是执行三次该请求。

    结果如下图所示,执行了三次SQL请求:

    我们在去数据库中查看数据是否添加成功。

    如下图所示,新增了三条数据,并且

    slogan
    字段中的数据是经过加密的。

    以上就完整的实现了,把经过加密的数据,存储到数据库中的演示。

    5、注意事项

    (1)

    The server time zone value
    服务器时区异常

    如果报错,如下:

    Cannot create PoolableConnectionFactory (The server time zone value '???��������??��??' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.)

    解决方法:数据库连接URL后面加

    serverTimezone=GMT
    serverTimezone=GMT%2B8
    ,即可解决。

    (2)执行多条SQL语句

    执行多条SQL语句时,查询语句

    select
    update
    insert
    语句不能在同一个
    JDBC Request
    组件中执行。

    当执行多条SQL 语句时,每条语句后面加

    ;

    并且在

    Database URL
    后增加一个参数
    allowMultiQueries=true
    ,否则将不能够执行多条语句,报错。

    (3)更新操作中文乱码

    需要在

    Database URL
    后增加一个参数
    characterEncoding=utf-8
    ,这样就可以解决更新操作时候的中文乱码了。

    提示:一定要设置为UTF-8编码吗?不一定,要跟你的数据库的编码保持一致,就不会中文乱码了。

    (4)

    Datebase URL
    添加参数规则

    Datebase URL
    后增加参数,在
    dbname
    后加
    ?
    ,如有多个参数,每个参数用
    &
    隔开,如:

    jdbc:mysql://127.0.0.1:3306/guest?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: