首页 > 数据库 >JMeter对数据库的查询操作步骤详解

JMeter对数据库的查询操作步骤详解

时间:2023-12-25 20:34:36浏览次数:35  
标签:语句 JDBC 变量 数据 详解 参数 SQL JMeter 操作步骤


提示:

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

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

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

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

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

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

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

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

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

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

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

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

JMeter对数据库的查询操作步骤详解_jmeter

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

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

如下图所示:

JMeter对数据库的查询操作步骤详解_数据库_02

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

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

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

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

需要注意:

  1. 如果我们需要发送带有占位符的SQL语句,Query Type:需要选择Prepared Select Statement
  2. Parameter values参数值和Parameter types参数类型,都必须要填写(参数类型与表设计结构中的类型一致即可)。如果有多个占位符,就需要有多组数据,之间用逗号分隔。
  3. 发送SQL请求时,第一个参数会自动赋值给第一个占位符,以此类推,注意参数的编写顺序。

如下图所示:

JMeter对数据库的查询操作步骤详解_程序员_03

(2)传递的参数值是变量

也就是占位符所接收的参数是一个参数化变量。我们把对应常量的位置,变成参数化变量即可,其他同上。

如下图所示:

JMeter对数据库的查询操作步骤详解_软件测试_04

各种形式的参数化可以这样使用。关于参数化相关知识,前面文章有详细说明。

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列的总行数
[email protected]    # B列的第一个数据,也就是第2列, 第1行的数据
[email protected]     # 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中定义接收数据的变量名,多个变量名之间用逗号分隔。

如下图所示:

JMeter对数据库的查询操作步骤详解_接口测试_05

(2)查看结果

添加一个取样器Debug Sampler用来查看输出的结果。(Debug Sampler组件可以查看到JMeter脚本运行中所有的变量)

JDBC Request请求结果,如下图所示:

JMeter对数据库的查询操作步骤详解_程序员_06

查看Debug Sampler中的输出结果,如下图所示:

JMeter对数据库的查询操作步骤详解_程序员_07

我们从上图中可以看到,JMeter把从数据库中查询出来的数据,存储在线程变量中了。

提示:

A代表第一列所有的数据,A_#可以获取到第一列的行数。A_n可以获得第一列第n行的数据。BC的功能类似, 假如我们只需要第一列和第三列的数据,可以写成A,,C,中间的,不可以省略。

4、Result variable name参数使用方法

如果给这个参数设置值,它会创建一个对象变量,保存所有返回的结果。

示例:

(1)JDBC Request组件界面内容

Result variable name中定义接收数据的变量名。

如下图所示:

JMeter对数据库的查询操作步骤详解_软件测试_08

(2)查看结果

添加一个取样器Debug Sampler用来查看输出的结果。(Debug Sampler组件可以查看到JMeter脚本运行中所有的变量)

JDBC Request请求结果,如下图所示:

JMeter对数据库的查询操作步骤详解_jmeter_09

查看Debug Sampler中的输出结果,如下图所示:

JMeter对数据库的查询操作步骤详解_jmeter_10

(3)数据处理

上面查看到的结果集,我们如何应用里面的数据呢?

我们可以创建一个BeanShell取样器,也可以在JDBC Request取样器下一级添加后置处理器BeanShell PostProcessor组件。

在里边编写如下代码,来获取需要的指定数据,提供给后面的接口请求使用。

JMeter对数据库的查询操作步骤详解_数据库_11

对象中具体数据的获取方法: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

标签:语句,JDBC,变量,数据,详解,参数,SQL,JMeter,操作步骤
From: https://blog.51cto.com/u_15333581/8971738

相关文章

  • Jmeter参数化获取序列数据实现过程
    一、序列数据是什么很简单,就是利用参数化能产生顺序值,比如1,2,3,4,5,6或者约定格式001,002,003,004等。二、jmeter产生序列数据2.1利用函数助手对话框实现在jmeter菜单处点击工具--函数助手对话框--下拉框选择counter--进入如下界面:mac系统点击生成时会自动复制生成的函数,直接......
  • Python中selenium库的用法详解
    selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载,当requests,urllib无法正常获取网页内容的时候一、声明浏览器对象注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入fromseleniumimportwebdriver#web......
  • python中的unittest框架实例详解
    在python中我们学习了不少理论知识,那么对相关的程序进行测试,就显得很重要了。本篇要讲的是unittest框架,我们可以用它来做一些测试工作,又或者是相关代码的编写。下面我们就unittest框架的说明、特性和4种字模块分别带来介绍,大家一起来看具体内容。1.unittest说明unittest是Python自......
  • AI分布式训练:DDP (数据并行)技术详解与实战
    分布式训练:DDP(数据并行)技术详解与实战一、背景介绍什么是AI分布式训练分布式训练作为一种高效的训练方法,在机器学习领域中得到了广泛的应用和关注。而其中的一种技术,就是数据并行(DDP)。在本节中,我们将详细介绍什么是AI分布式训练,并重点讨论了数据并行技术的原理和实施方式。我们将......
  • Object.hashCode() 详解
    在Java编程中,hashCode方法是一个常见而重要的概念。它通常用于哈希表、集合以及一些需要高效检索数据的数据结构中。然而,对于许多开发者来说,hashCode方法可能是一个容易被忽略或者被简单实现的部分。在本文中,我们将深入探讨Java中hashCode的一些思考,以便更好地理解其背后的原理和影......
  • Keepalived 高可用详解
    Keepalived详解1、Keepalived介绍​ Keepalived是一个基于VRRP协议来实现LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会使用2台服务器运行Keepalived,一台为主服务器MASTER,另一台为备份服务器BACKUP,但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务......
  • C# Task详解
    C#Task详解 推荐几篇写的很好的文章,本文部分转自https://blog.csdn.net/btfireknight/article/details/97766193https://blog.csdn.net/boonya/article/details/80541571https://blog.csdn.net/nacl025/article/details/9163495/1.Task原理这里简要的分析下CLR线程池......
  • 使用WebStack和Laravel打造个人网址导航安装过程问题和详解记录
    前言最近测试了国内推出的多个AI大模型,为了方便记录同时方便推荐给朋友想做个AI工具网址导航。网上开源的项目有很多,最后选中了WebStack和Laravel,但是不知道是否作者长时间不更新了遇到不少问题,解决完记录一下。准备工作,购买云服务器,安装宝塔,解析域名解析等等正文1.登录宝塔创建站......
  • jmeter 压力机端口不够用Response code:Non HTTP response code: java.net.NoRouteToH
    四  压测机异常,修改配置后重试Responsecode:NonHTTPresponsecode:java.net.NoRouteToHostException原因:Jmeter发压机的端口不够用解决办法:1.netstat|grepTIME_WAIT|wc-l查看目前处在TIME_WAIT状态的值大不大2.检查系统sysctl中配置项:(/etc/sysctl.conf)net.ipv4.t......
  • top命令详解
    top命令详解概述toptop是一个常用的命令行工具,用于实时监视系统的进程和系统资源使用情况。它提供了一个动态更新的终端界面,显示了各个进程的CPU使用率、内存占用、进程ID、运行时间等信息。下面是top命令的一些常用选项和功能:显示进程信息:top命令默认显示当前系统中运行的......