『动善时』JMeter基础 — 44、JMeter对数据库的更新操作
提示:
关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了。因为配置数据库连是比较固定的步骤,这里就不重复讲解了。
本篇文章主要详细说明,使用
JDBC Request
组件,如何对数据库进行更新的各种操作。
JMeter中更新语句的操作步骤:
- 添加测试计划。
- 添加线程组,设置线程组的次数。
- 添加
JDBC Connection Configuration
组件,配置数据库连接。 - 添加
JDBC Request
请求,编写SQL语句,进行参数化。 - 运行脚本,发送SQL请求。
- 添加察看结果树,查看结果。
说明:更新操作包含
insert
、update
、delete
三种操作,都是一样性质的,所以我们就以insert
操作为例进行说明。
1、执行一条insert语句
使用JMeter发送一条insert
语句非常的简单。
在JDBC Request
组件中做如下操作:
- 选择数据库连接配置。
- 选择
Query Type
:因为是执行一条insert
语句,所以选择Update Statement
即可。 - 把完整一条
insert
语句,输入到Query
文本框中。
如下图所示:
说明:这是最基础的
insert
操作,发送了一条固定的insert
请求。
2、insert语句实现参数化
JMeter中在insert
请求中实现参数化也非常的简单。
在JDBC Request
组件中做如下操作:
- 选择数据库连接配置。
- 选择
Query Type
:因为是执行一条insert
语句,所以选择Update Statement
即可。 - 把完整一条
insert
语句,输入到Query
文本框中。 - 把需要参数化的部分,替换成参数化变成的引用即可。
使用函数助手为例进行演示,如下图所示:
说明:其他形式的参数化也都可以,如利用CSV这个元件去做语句的参数化。本例中是用函数助手方便演示。
提示:如果有些字段是自增长的值或者是有默认值,那么就可以不写,让其自动填充。
3、一次执行多条insert语句
使用JMeter发送一次执行多条insert
语句非常的简单,就是直接写入多条insert
语句,之间用;
分隔开。
在JDBC Request
组件中做如下操作:
- 选择数据库连接配置。
Database URL
后增加一个参数allowMultiQueries=true
,才可以执行多条SQL语句(重点)。- 选择
Query Type
:我们可以选择Update Statement
、Prepared Update Statement
和Callable Statement
,这三种类型语句都可以。
选择Update Statement
类型,执行一条insert
语句发送一次请求。
而选择Prepared Update Statement
和Callable Statement
类型,则全程只发送一起请求。 - 把完整一条
insert
语句,输入到Query
文本框中。
如下图所示:
4、使用Beanshell生成加密数据示例
我们在更新数据库的时候,有时候会有部分数据直接插入是不可以的,需要加密处理。
那么就可以使用BeanShell 取样器组件完成对数据的加密操作。
然后把加密好的数据,存储到JMeter的线程变量中,方便进一步的引用。
提示:加密代码,可以找开发要,也可以自己扒源码找。
JMeter中更新有加密数据的操作步骤:
- 添加测试计划。
- 添加线程组,设置线程组的次数。
- 添加
JDBC Connection Configuration
组件,配置数据库连接。 - 添加BeanShell 取样器组件,编写加密算法,并把加密的数据存储到线程变量中。
- 添加
JDBC Request
请求,编写SQL语句,使用参数化,并引用加密的线程变量。 - 运行脚本,发送SQL请求。
- 添加察看结果树,查看结果。
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组下,添加配置原件
JDBC连接配置
组件:选中“线程组”右键 —> 添加 —> 配置元件 —> JDBC Connection Configuration
。 - 在线程组下,添加取样器
BeanShell 取样器
组件:选中“线程组”右键 —> 添加 —> 取样器 —> BeanShell 取样器
。 - 在线程组下,添加取样器
JDBC Request
组件:选中“线程组”右键 —> 添加 —> 取样器 —> JDBC Request
。 - 在线程组下,添加监听器“察看结果树”组件:
选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树
。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)JDBC连接配置组件内容
基本的JDBC连接配置,界面内容详解可以看前面的文章【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
『动善时』JMeter基础 — 44、JMeter对数据库的更新操作的更多相关文章
- 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求
目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...
- 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)
目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...
- 『动善时』JMeter基础 — 29、JMeter响应断言详解
目录 1.JMeter断言介绍 2.响应断言组件界面详解 3.响应断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)响应断言界面内容 (4)查看运行结果 (5)断言结果组件 ...
- 『动善时』JMeter基础 — 43、JMeter对数据库的查询操作
目录 1.使用"用户自定义变量"实现参数化 2. 在SQL Query中使用占位符传递参数 (1)传递的参数值是常量 (2)传递的参数值是变量 3.Variables names参 ...
- 『动善时』JMeter基础 — 49、使用JMeter自身代理录制APP测试脚本
目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置手机的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 8.注意坑点 录制脚本只不 ...
- 『动善时』JMeter基础 — 58、JMeter分布式测试
目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...
- 『动善时』JMeter基础 — 61、使用JMeter监控服务器
目录 1.监控插件安装 2.启动监控服务 3.使用JMeter监控服务器 (1)测试计划内包含的元件 (2)HTTP请求界面内容 (3)配置jp@gc-PerfMon Metrics Collecto ...
- 『动善时』JMeter基础 — 1、JMeter介绍
1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...
- 『动善时』JMeter基础 — 3、JMeter插件管理
JMeter是一个Java开发的开源软件,开源的软件有一个好处,就是会有很多第三方开发出来的插件,使得JMeter在处理某一些功能的时候更加的方便.并且这些插件拿过来就可以使用,完全免费的. 我们安装 ...
随机推荐
- Java常见异常(Runtime Exception )小结
java.lang.NullPointerException 程序遇上了空指针 UnsupportedOperationException 不支持的操作 IllegalArgumentExceptio ...
- vscode 终端操作命令npm报错
错误: 如果没有安装的node.js ,则需要安装. node.js官网下载地址: https://nodejs.org/zh-cn/ 安装node.js 后会看到C:\Users\XXX\AppDa ...
- CSS层叠性
比较id,类,标签的数量 谁多就谁在上面 255个类的权重等于一个id 当权重一样时,以后设置的为准 通过继承而来的,权重为0 !important (设置权重无限大)可以影响权重,但只能影响选中的, ...
- Django(31)模板中常用的过滤器
模版常用过滤器 在模版中,有时候需要对一些数据进行处理以后才能使用.一般在Python中我们是通过函数的形式来完成的.而在模版中,则是通过过滤器来实现的.过滤器使用的是|来使用. add 将传进来的参 ...
- Linux VMware Tools详解
VMware Tools描述 VMware Tools 中包含一系列服务和模块,可在 VMware 产品中实现多种功能,从而使用户能够更好地管理客户机操作系统,以及与客户机系统进行无缝交互. 在Lin ...
- [Python] 微信公众号开发 Python3
搭建服务 开通一个阿里云ecs,安装python3及需要的包(参考下方官方文档) 将py文件保存在ecs上,运行 在本地访问阿里云的IP地址 能完成这步说明网络没问题 server.py 1 # -* ...
- H5开发基础之像素、分辨率、DPI、PPI
H5开发基础之像素.分辨率.DPI.PPI html5 阅读约 4 分钟 2016-09-03于坝上草原 背景知识: 目前绝大部分显示器都是基于点阵的,通过一系列的小点排成一个大矩形,通过每个小 ...
- (转)细说linux挂载
个人觉得说的很透彻的一篇文章,深入浅出,通俗易懂,把好久之前的一些概念彻底厘清了. 转自https://www.cnblogs.com/ma5on/p/4357625.html 转载的文章不能分类 这 ...
- linux进阶之网络技术管理
本节内容 1. 网络七层模型 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 2. TCP/UDP (1)TCP面向连接,可靠传输,消耗系统资源比较多,传输速度较慢,但是数据传 ...
- linux中级之HAProxy基础配置
一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...