提示

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

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

JMeter中查询语句的操作步骤:

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

1、使用“用户自定义变量”实现参数化

即:在SQL Query使用参数化变量。

在JMeter中,有两个地方可以设置“用户自定义变量”。

一种是“测试计划”界面中设置“用户自定义变量”。

一种是添加配置元件中的“用户自定义变量”。

我们以“测试计划”为例。如下图:

(1)在“测试计划”界面中设置“用户自定义变量”。

我们添加了一个自定义变量用户ID,如下图:

(2)在JDBC Request界面的SQL Query中,使用${变量名}的方式进行引用。

  1. 我们在Varíable Name填写对应的数据库配置名称,与JDBC Connection Configuration组件中的Varíable Name对应。
  2. Query Type:选择Select Statement,因为我们只进行一条查询的SQL语句。
  3. 编写SQL语句,并使用${变量名}方式引用参数化变量。

如下图所示:

2、 在SQL Query中使用占位符传递参数

传递的参数值有常量和变量之分。

(1)传递的参数值是常量

传递2个常量:用户ID=3,用户名=孙悟空。

需要注意:

  1. 如果我们需要发送带有占位符的SQL语句,Query Type:需要选择Prepared Select Statement
  2. Parameter values参数值和Parameter types参数类型,都必须要填写(参数类型与表设计结构中的类型一致即可)。如果有多个占位符,就需要有多组数据,之间用逗号分隔。
  3. 发送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行的数据。
  • BC的功能类似, 假如我们只需要第一列和第三列的数据,可以写成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 valuesParameter typesVariable namesResult 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=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=true

参考:https://www.cnblogs.com/linbo3168/p/6039489.html

『动善时』JMeter基础 — 43、JMeter对数据库的查询操作的更多相关文章

  1. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  2. 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)

    目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...

  3. 『动善时』JMeter基础 — 29、JMeter响应断言详解

    目录 1.JMeter断言介绍 2.响应断言组件界面详解 3.响应断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)响应断言界面内容 (4)查看运行结果 (5)断言结果组件 ...

  4. 『动善时』JMeter基础 — 49、使用JMeter自身代理录制APP测试脚本

    目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置手机的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 8.注意坑点 录制脚本只不 ...

  5. 『动善时』JMeter基础 — 58、JMeter分布式测试

    目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...

  6. 『动善时』JMeter基础 — 61、使用JMeter监控服务器

    目录 1.监控插件安装 2.启动监控服务 3.使用JMeter监控服务器 (1)测试计划内包含的元件 (2)HTTP请求界面内容 (3)配置jp@gc-PerfMon Metrics Collecto ...

  7. 『动善时』JMeter基础 — 1、JMeter介绍

    1.什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,用于对软件做压力测试.它最初被设计用于Web应用测试,但后来扩展到其他测试领域. (Apache ...

  8. 『动善时』JMeter基础 — 53、JMeter集合点功能的使用

    目录 1.集合点介绍 2.同步定时器界面介绍 3.集合点的使用 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)同步定时器内容 (5)运行脚本查看结果 4.集合点设 ...

  9. 『动善时』JMeter基础 — 57、Linux系统中运行JMeter脚本

    目录 1.Linux系统中安装Java环境 (1)解压Java安装包 (2)配置Java环境变量 (3)验证Java环境是否配置成功 2.Linux系统中安装JMeter (1)下载JMeter (2 ...

随机推荐

  1. Windows核心编程 第27章 硬件输入模型和局部输入状态

    第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27 ...

  2. 初学Golang的笔记

    Note 一个module是一个go package的集合,该module用于发布的一个单位. 一般一个go repo仅仅包含一个module,含有一个go.mod文件 每个module路径不仅仅用于 ...

  3. PHP 父类方法如何访问子类属性

    设计知识点 类与对象->后期静态绑定 出现的问题 A 类为父类 里面有一个方法为调用当前类的 $name 属性 当 B 类继承了 A类时 但是输出仍然是 A (父类) 的 属性? <?ph ...

  4. 7个IntelliJ IDEA必备插件,提高编码效率

    1. FindBugs-IDEA 作用: 检测代码中可能的bug及不规范的位置,写完代码后检测下 避免低级bug. 静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验 ...

  5. 关于MDI多文档程序的一些思考

    MDI程序的框架 客户窗口是一个预定义的窗口类(MDICLIENT),它是框架窗口的子窗口同时也是各个子文档窗口的父窗口.框架窗口和各个子文档窗口都是自定义的窗口类. MDI程序中的一些要点 窗口中的 ...

  6. Pytorch_Part3_模型模块

    VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...

  7. 在Visual Studio 中使用git——浏览版本库(七)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  8. 对spring创建对象时为何要使用接口

    对spring创建对象时为何要使用接口,而使用接口的实现类会报错 接上一篇问题的解答:Spring AOP获取不了增强类(额外方法)和无法通过getBean()获取对象 此问题发生在动态代理时,比如对 ...

  9. [bug] vscode output 输出乱码

    参考 https://blog.csdn.net/qq_34192032/article/details/105077173 https://blog.csdn.net/a19990412/artic ...

  10. 【转载】使用rdp协议访问远程Linux桌面

    使用rdp协议访问远程Linux桌面 2017年03月31日 16:23:49 太阳之影 阅读数:2169   一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需 ...