『动善时』JMeter基础 — 43、JMeter对数据库的查询操作
提示:
关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了。因为配置数据库连接是比较固定的步骤,这里就不重复讲解了。
本篇文章主要详细说明,使用
JDBC Request
组件,如何对数据库进行查询的各种操作。
JMeter中查询语句的操作步骤:
- 添加测试计划。
- 添加线程组,设置线程组的次数。
- 添加
JDBC Connection Configuration
组件,配置数据库连接。 - 添加
JDBC Request
请求,编写SQL语句,使用参数化。 - 运行脚本,发送SQL请求。
- 添加察看结果树,查看结果。
1、使用“用户自定义变量”实现参数化
即:在SQL Query
使用参数化变量。
在JMeter中,有两个地方可以设置“用户自定义变量”。
一种是“测试计划”界面中设置“用户自定义变量”。
一种是添加配置元件中的“用户自定义变量”。
我们以“测试计划”为例。如下图:
(1)在“测试计划”界面中设置“用户自定义变量”。
我们添加了一个自定义变量用户ID,如下图:
(2)在JDBC Request
界面的SQL Query
中,使用${变量名}
的方式进行引用。
- 我们在
Varíable Name
填写对应的数据库配置名称,与JDBC Connection Configuration
组件中的Varíable Name
对应。 Query Type
:选择Select Statement
,因为我们只进行一条查询的SQL语句。- 编写SQL语句,并使用
${变量名}
方式引用参数化变量。
如下图所示:
2、 在SQL Query
中使用占位符传递参数
传递的参数值有常量和变量之分。
(1)传递的参数值是常量
传递2个常量:用户ID=3,用户名=孙悟空。
需要注意:
- 如果我们需要发送带有占位符的SQL语句,
Query Type
:需要选择Prepared Select Statement
。 Parameter values
参数值和Parameter types
参数类型,都必须要填写(参数类型与表设计结构中的类型一致即可)。如果有多个占位符,就需要有多组数据,之间用逗号分隔。- 发送SQL请求时,第一个参数会自动赋值给第一个占位符,以此类推,注意参数的编写顺序。
如下图所示:
(2)传递的参数值是变量
也就是占位符所接收的参数是一个参数化变量。我们把对应常量的位置,变成参数化变量即可,其他同上。
如下图所示:
各种形式的参数化可以这样使用。关于参数化相关知识,前面文章有详细说明。
3、Variables names
参数的使用方法
Variables names
参数的作用是,把SQL语句查询出来的数据保存到变量中。一般查询返回几个字段,就用几个变量来进行接收,不同的变量之间用逗号隔开。
JMeter官网给的解释是:如果给这个参数设置了值,它会保存SQL语句返回的数据和返回数据的总行数。
假如,SQL语句返回2行,3列的数据,且Variables names
中设置为A,B,C
,那么如下变量会被设置为:
A_#=2 # A列的总行数
A_1=3 # A列的第一个数据,也就是第1列, 第1行的数据
A_2=4 # A列的第二个数据,也就是第1列, 第2行的数据
B_#=2 # B列的总行数
B_1=sunwukong@1268.com # B列的第一个数据,也就是第2列, 第1行的数据
B_2=zhubajie@1268.com # B列的第二个数据,也就是第2列, 第2行的数据
C_#=2 # C列的总行数
C_1=孙悟空 # C列的第一个数据,也就是第3列, 第1行的数据
C_2=猪八戒 # C列的第二个数据,也就是第3列, 第2行的数据
说明:
- 如果返回结果为0,那么
A_#
和C_#
会被设置为0,其它变量不会设置值。- 如果第一次请求返回6行数据,第二次请求只返回3行数据,那么第一次那多的3行数据,在线程变量中会被清除。
- 可以使用
${A_#}
、${A_1}
来获取相应的值,作为参数化数据进行传递。- 可以添加
Debug Sampler
组件,来查看参数是否获取到了。
示例:
(1)JDBC Request
组件界面内容
在Variable names
中定义接收数据的变量名,多个变量名之间用逗号分隔。
如下图所示:
(2)查看结果
添加一个取样器Debug Sampler
用来查看输出的结果。(Debug Sampler
组件可以查看到JMeter脚本运行中所有的变量)
JDBC Request
请求结果,如下图所示:
查看Debug Sampler
中的输出结果,如下图所示:
我们从上图中可以看到,JMeter把从数据库中查询出来的数据,存储在线程变量中了。
提示:
A
代表第一列所有的数据,A_#
可以获取到第一列的行数。A_n
可以获得第一列第n行的数据。B
和C
的功能类似, 假如我们只需要第一列和第三列的数据,可以写成A,,C
,中间的,
不可以省略。
4、Result variable name
参数使用方法
如果给这个参数设置值,它会创建一个对象变量,保存所有返回的结果。
示例:
(1)JDBC Request
组件界面内容
在Result variable name
中定义接收数据的变量名。
如下图所示:
(2)查看结果
添加一个取样器Debug Sampler
用来查看输出的结果。(Debug Sampler
组件可以查看到JMeter脚本运行中所有的变量)
JDBC Request
请求结果,如下图所示:
查看Debug Sampler
中的输出结果,如下图所示:
(3)数据处理
上面查看到的结果集,我们如何应用里面的数据呢?
我们可以创建一个BeanShell
取样器,也可以在JDBC Request
取样器下一级添加后置处理器BeanShell PostProcessor
组件。
在里边编写如下代码,来获取需要的指定数据,提供给后面的接口请求使用。
对象中具体数据的获取方法:
columnValue = vars.getObject("resultObject").get(0).get("Column Name")
5、总结:
以上我们就把Parameter values
、Parameter types
、Variable names
、Result variable name
的使用方式进行了说明。
在日常工作中,可以举一反三,灵活使用。
6、注意事项:
(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基础 — 43、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基础 — 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基础 — 53、JMeter集合点功能的使用
目录 1.集合点介绍 2.同步定时器界面介绍 3.集合点的使用 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)同步定时器内容 (5)运行脚本查看结果 4.集合点设 ...
- 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本
目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...
随机推荐
- hdu3415单调队列
题意: 给你一个数字组成的环,要求在里面找到一个最大的子序列,使得和最大,要求: (1)子序列长度不能超过k (2)如果子序列和相同要起点最小的 (3)如果起点相同要长度最小的 思路: ...
- Win64 驱动内核编程-13.回调监控模块加载
回调监控模块加载 模块加载包括用户层模块(.DLL)和内核模块(.SYS)的加载.传统方法要监控这两者加在必须 HOOK 好几个函数,比如 NtCreateSection 和 NtLoadDriver ...
- Day001 Typora Markdown语法学习
# Markdown语法 ## 标题 ### 三级标题 #### 四级标题 注:最多支持到六级标题 ## 字体 **hello,world!** *hello,world!* ***hello,wor ...
- Root mapping definition has unsupported parameters
使用ElasticSearch创建映射报错 Root mapping definition has unsupported parameters 原因 使用的ES版本为7.2.0,不再支持创建指定类型 ...
- 【vue-05】vue-cli
Vue-router官网 安装 vue-router是一个插件包,所以我们还是需要用npm 来进行安装.打开命令行工具,进入你的项目目录,输入下面命令. npm install vue-router ...
- 改善c++程序的150个建议(读后总结)-------0-9
0. 不要让main 函数返回 void 入口函数main()返回类型应该为 int, 即程序结束时return 0 表示程序正常返回,函数结束时 return -1 值表示程序异常返回, 如果不显式 ...
- CRM客户关系管理系统有哪些优缺点?
CRM系统不仅仅是一种技术,也是面向企业的客户管理系统.客户关系管理软件可以帮助销售员快速地找到客户信息,帮助销售员跟踪客户直到完成订单.为提高企业销售效率,CRM被越来越多的企业所采用. 那么,作为 ...
- Ansible流程控制
Ansible流程控制 数据库操作问题: 数据库的操作问题,python需要依耐的模块MySQL-python . 数据库的操作 # 设置root的密码在,root的密码设置之后,创建用户和创建数据库 ...
- vue2路由之指定滑动位置scrollBehavior-(载转)
看源码的时候看到这个属性: 新手自然不知道这个是什么东西了,查了下vue API: https://router.vuejs.org/en/advanced/scroll-behavior.html ...
- IDEA 查看类图功能(分析源码的利器)
引言 做过项目开发的童靴,应该会有这样的经历,就是刚进公司领导二话不说直接丢个项目,而且没有任何文档,让熟悉一下,一两周就让上手写代码.打开项目后就看到一堆类源码,完全不知道从何处入手,应该如何分析项 ...