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

本篇文章主要详细说明,使用JDBC Request组件,如何对数据库进行更新的各种操作。

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

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

说明:更新操作包含insertupdatedelete三种操作,都是一样性质的,所以我们就以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这个元件去做语句的参数化。本例中是用函数助手方便演示。

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

Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834

3、一次执行多条insert语句

使用JMeter发送一次执行多条insert语句非常的简单,就是直接写入多条insert语句,之间用;分隔开。

JDBC Request组件中做如下操作:

  1. 选择数据库连接配置。
  2. Database URL 后增加一个参数allowMultiQueries=true,才可以执行多条SQL语句(重点)。
  3. 选择Query Type:我们可以选择Update StatementPrepared Update StatementCallable Statement,这三种类型语句都可以。
    选择Update Statement类型,执行一条insert语句发送一次请求。
    而选择Prepared Update StatementCallable 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连接配置,界面内容详解可以看前面的文章【JMeter连接数据库】。

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

如下图所示:

Jmeter高级性能测试实战https://edu.csdn.net/course/detail/35834

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=GMTserverTimezone=GMT%2B8,即可解决。

(2)执行多条SQL语句

执行多条SQL语句时,查询语句selectupdateinsert语句不能在同一个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=trueJmeter高级性能测试实战https://edu.csdn.net/course/detail/35834

JMeter对数据库的更新操作相关推荐

  1. php查询更新数据库数据类型,更新Update

    [TOC] #### Db类实现 ~~~ Db::table('user') ->where('id', 1) ->update([ 'name' => 'topthink', 'e ...

  2. ClickHouse 更新操作

    clickhouse 更多应用在 查询select  和写入insert  上. 提供部分更新操作,但相比其他各大数据库的更新操作来说,效果已经很好了,下面来详细介绍一下 更新这一块. 更新: 1. ...

  3. Oracle从零开始4——数据库更新操作

    数据库的主要操作分为两种: 查询操作:SELECT 更新操作:INSERT.DELETE.UPDATE 此时为保存原始的emp表的信息,在进行增加.修改.删除操作之前,先将此表复制一份 此语句执行之后 ...

  4. java查询到更新之前的数据_Java对数据库的查询和更新操作详解

    这篇文章主要介绍了使用Java对数据库进行基本的查询和更新操作,是Java入门学习中的基础知识,需要的朋友可以参考下 数据库查询 利用Connection对象的createStatement方法建立S ...

  5. 使用Mybatis进行更新操作成功,数据库却没更新的原因

    先帖下代码: public void updateCustomerTest() throws IOException{//1.读取配置文件String resource="mybatis-c ...

  6. Oracle数据库中的级联查询、级联删除、级联更新操作教程

    这里整理了Oracle中的三种级联操作,其中Oracle定义外健的时候可以定义级联删除,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle数据库中的级联查询.级联删除.级联更新 ...

  7. WEB数据库管理平台kb-dms:数据库查询+更新+删除操作【六】

    数据库查询+更新+删除操作 kb-dms平台为用户提供了命令行窗口执行的功能可以进行查询等操作,还提供了快捷键的方式及在线编辑的功能等. 窗口命令行操作数据库 命令行窗口有表名提示功能及sql关键字提 ...

  8. 解决spring JdbcTemplate更新操作成功但数据库未插入值的方案

    //开启新事务 DefaultTransactionDefinition transDefinition = new DefaultTransactionDefinition(); transDefi ...

  9. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive数据库和表操作 一.数据库操作 1.创建数据库 2.创建 ...

最新文章

  1. 计算机 大学活动 游戏,朝花夕拾”——中国矿业大学计算机学院积极举办“那些年我们一起玩过的游戏”活动...
  2. Beetl 性能揭秘 1 :如何输出一个整型变量
  3. Atitit.软件控件and仪表盘(23)--多媒体子系统--视频输出切换控制cvbs av s-video Ypbpr pal ntsc
  4. iec61508最新2020_功能安全IEC61508标准新旧版的对比
  5. 历代iPhone的分辨率
  6. 计算机连接不上蓝牙鼠标,如果蓝牙鼠标无法连接到计算机该怎么办?
  7. 详细讲解 —— 网络编程套接字(Java EE初阶)
  8. 【码农学编曲】Cubase乐器轨音频轨各种轨没声音的终极解决方案
  9. MFC的进度栏的编程
  10. 相关计算机犯罪的案例,案例6 计算机犯罪案例分析
  11. 基于iView-Cascader的多选级联选择器:cascader-multi
  12. 墨画子卿第四章第2节:如意随心
  13. JAVA TIME API总结
  14. 白话空间统计之:Moran's I(莫兰指数)
  15. Java常用时间计算
  16. Beyond 《光辉岁月》 岁月无声
  17. 【与丁中文老师的交流】
  18. 从Mat_中提取数据失败 以及 Mat_与Mat的区别
  19. 记录一下CTF选拔赛的一道misc-ad
  20. IEO调查回顾:87个项目,募资20亿,62%破发,最高亏损99%

热门文章

  1. 什么是离线迁移(闪电立方)
  2. VMware NSX许可
  3. Kubernetes学习总结(13)—— Kubernetes 各个组件的概念
  4. MyBatis学习总结(15)——定制Mybatis自动代码生成的maven插件
  5. java运行指定文件_java打开指定文件(运行指定程序exe)
  6. linux系统故障排除
  7. Office 365有个AI「工作场所分析」掌握组织人力资源
  8. 【区块链之菜鸟入门】区块链发展史:从拜占庭将军问题到智慧契约
  9. ABP框架系列之六:(Value-Objects-值对象)
  10. 科技圈自媒体达人吴恩达又双叒叕刷屏了 这次是因为Deeplearning.ai