数据库性能测试

目录

前言:

1.引入数据库驱动包

2.添加数据库配置元件

3、JDBCRequest参数化

4、Variablesnames参数使用方法:


前言:

数据库性能测试是测试数据库系统在各种条件下的性能和稳定性的过程。它可以帮助测试人员识别数据库系统的性能瓶颈,并确定其可扩展性、并发性和响应时间等方面的指标。

1.引入数据库驱动包

创建一个数据库测试计划,在测试计划中引入数据库驱动包,这里以oracle为例,驱动包网上有很多下载的地方,下载后放在什么地方都行,然后引入。

2.添加数据库配置元件

2.1创建线程组,在线程组下添加配置元件JDBCConnectionConfiguration。

配置解析:

  • VariableName:配置元件的的所有配置所保存的变量,自定义变量名称,多个jdbc配置元件可以使用相同的变量,但是只有一个会被jdbc请求使用,这里定义的变量名称会被之后的jdbc请求引用,以此来判断请求使用的是哪个配置元件所定义的数据库配置,必填项,如果不填运行后会报错VariableNamemustnotbeemptyforelement:JDBCConnectionConfiguration;

  • ConnectionPoolConfiguration和ConnectionValidationbyPool分别是设置数据库连接池配置和针对活动连接的生命周期的设置;

  • DatabaseURL:数据连接的访问地址;

  • JDBCDriverclass:数据库连接的驱动类;

  • Username:访问数据库的用户名;

  • Password:访问数据的密码;

  • 对于DatabaseURL和JDBCDriverclass不同的数据的链接和驱动类是不同的。

2.2添加数据库请求,选中线程组右键添加-->Sampler-->JDBCRequest

  • Variable Name:数据库连接池的名字,需要与JDBCConnection Configuration的Variable Name Bound Pool名字保持一致;

  • Query:填写的sql语句未尾不要加“;”;

  • Parametervalus:参数值;

  • Parametertypes:参数类型,可参考:Javadocforjava.sql.Types;

  • Variablenames:保存sql语句返回结果的变量名;

  • Resultvariablename:创建一个对象变量,保存所有返回的结果;

  • Querytimeout:查询超时时间;

  • Handleresultset:定义如何处理由callablestatements语句返回的结果。

配置解析:

  • VariableName:选用的配置元件变量,前面已经设置了jdbc配置元件的同名字段,这里需要与配置元件的同名字段相同才能引用配置元件的配置,如果你有多个jdbc配置元件,那么根据不同的sampler选择不同的配置元件,这里填入相对应的jdbc配置元件VariableName值即可。

  • SQLQuery---QueryType:sql语句类型,下拉框有8个选项,查询语句的话就选SelectStatement,更新语句的话就选UpdateStatement,但是其实不按照这个规则进行的话jmeter这边会报错,但是其实数据库里的值已经操作成功了;如果你要使用图片下方的Parametervalues这一块的设置的话,QueryType就需要选择对应的PreparedSelectStatement或者PreparedUpdateStatement;输入框里输入sql语句;

  • Parametervalues:参数值,在sql语句里对于参数使用?代替,那么这里的输入框就输入?号所代表的的具体值,多个时使用逗号分隔;

  • Variablenames:sql语句中?所代表的参数变量名称,非必填项,填上有助于与脚本的可读性;

  • ResultVariablename:运行结果保存的变量名称,非必填项,如果设置了以后,运行结果将会以多个map形式的list保存在所设置的变量中,结果中的列名作为map的key值,列的值作为map的value;使用方法columnValue=vars.getObject("resultObject").get(0).get("ColumnName");在jdbc请求之后添加BeanShellPostProcessor后置处理器,脚本区域输入脚本内容。

jdbc请求设置:

BeanShell后置处理器请求设置:

还有一种方式使用jdbc请求的结果保存变量Resultvalues,将BeanShell脚本:

columnValue=vars.getObject("res").get(0).get("USERNAME");
returncolumnValue;

3、JDBCRequest参数化

方法(一)、定义变量,在sqlquery中使用变量:

  • 在TestPlan中定义一个变量(当然也可以使用参数化:Jmeter参数化):

  • sqlquery中使用${变量名}的方式引用:

select*fromtestwherename='${name}'

方法(二)、在sqlquery中使用”?“作为占位符,并传递参数值和参数类型:

  • 传递的参数值是常量,多个变量使用”,“分隔。这里假如你有数据是int类型的,也要在Parametertypes那里标示为varchar类型,否则无法运行。

  • 传递的参数值是变量,使用${变量名}的方式。

4、Variablesnames参数使用方法:

jmeter官网给的解释是:如果给这个参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。假如,sql语句返回2行,3列,且variablesnames设置为A,,C,那么如下变量会被设置为:

A_#=2(总行数)

A_1=第1列,第1行

A_2=第1列,第2行

C_#=2(总行数)

C_1=第3列,第1行

C_2=第3列,第2行

  • 如果返回结果为0,那么A_#和C_#会被设置为0,其它变量不会设置值。

  • 如果第一次返回6行数据,第二次只返回3行数据,那么第一次那多的3行数据变量会被清除。

  • 可以使用${A_#}、${A_1}...来获取相应的值

示例:

我们还是用上面的数据库,把所有数据查出来,test表有有3个字段,5条记录(忘记了的可以回到第一步那里查看)

  1. 添加一个jdbcrequest名为”参数4“,添加一个”DebugSampler“用来查看输出的结果,设置variablesname为column1,column2,column3:

  2. 执行结果:

解析:
column1代表第一列所有的数据,column1_#可以获取到第一列的行数
column1_n:获得第一列第n行的数据。
column2和column3的功能类似,假如我们只需要第一列和第三列的数据,可以写成column1,,column3,中间的","不可以省略。

遇到的问题:

  • jmeter参数化后一直有部分数据报错,报错的结果显示SQL无效字符,SQL语句未正常结束最后通过把csv文件改为txt文件,并且格式编码设为utf-8,问题解决。

  • jmeter连接mysql时运行无结果

解决方法:查看JDBCConnectionConfiguration配置是否有错,variablename是否有填值
  • JMeter连接mysql时运行时报“VariableNamemustnotbenullinJDBCRequest”

解决方法:查看JDBCRequest中的variablename是否有填写,且与JDBCConnectionConfiguration中的variablename是否保持一致。
  • JMeter连接mysql时运行报“CannotloadJDBCdriverclass‘org.git.mm.mysql.Driver‘

解决方法:修改JDBCConnectionConfiguration中的JDBCDriverclass配置为com.mysql.jdbc.Driver
  • ORA-01008并非所有变量都已关联

解决方法:修改jdbcRequest类中,querytype选择preparedselectstatement
  • preparedselectstatement,对应的SQL需要带参数例如:select*fromstudentwherenamein(?)

selectstatement对应的SQL不需要带参数例如:
select*fromstudent

 

作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N5K3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=6gweEAHLIo-VjldEz9_yMjFfeBIGgEu2&authKey=MC4ik2bydrYxO5if1oNFzT6c93XUrxOxYtv7IRYOVRDNh47xpEllgkFVDlFD%2Bf6M&noverify=0&group_code=574737577

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3956.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Zookeeper】win安装随笔

目录 下载地址下载目标解压后目录结构配置文件配置文件详情伪分布式安装LinuxZooKeeper audit is disabled启动解决报错:SLF4J: Class path contains multiple SLF4J bindings. _ 下载地址 https://zookeeper.apache.org/releases.html 下载目标 记住选择带bin的…

Elasticsearch:使用 Elasticsearch 矢量搜索和 FastAPI 构建文本搜索应用程序

在我的文章 “Elastic:开发者上手指南” 的 “NLP - 自然语言处理及矢量搜索”,我对 Elastic Stack 所提供的矢量搜索有大量的描述。其中很多的方法需要使用到 huggingface.co 及 Elastic 的机器学习。这个对于许多的开发者来说,意味着付费使…

【数据库一】MySQL数据库初体验

MySQL数据库初体验 1.数据库基本概念1.1 数据Data1.2 表1.3 数据库1.4 数据库管理系统1.5 数据库系统 2.数据库的发展3.主流的数据库介绍3.1 SQL Server(微软公司产品)3.2 Oracle (甲骨文公司产品)3.3 DB2(IBM公司产品…

io.netty学习(十三)Netty 解码器

目录 前言 编解码概述 编解码器概述 Netty 内嵌的编码器 解码器 ByteToMessageDecoder 抽象类 ReplayingDecoder 抽象类 MessageToMessageDecoder 抽象类 总结 前言 编码和解码:数据从一种特定协议格式到另一种格式的转换。 处理编码和解码的程序通常被称…

uin-app项目实现pdf文件预览以及下载

由于项目需要,需要对于pdf格式的文件进行预览由用户进行选择性下载,查阅相关文档后方知针对于这种 pdf.js有奇效 一、下载 官网地址https://mozilla.github.io/pdf.js/getting_started/#download 文档下载解压成功后,按照这种格式放入uin-…

计算机基本组成和冯诺依曼机

计算机基本组成和冯诺依曼机 计算机的基本组成 计算机硬件组成 软件与硬件的逻辑等价性 冯诺依曼计算机硬件结构 冯诺依曼计算机工作原理 程序存储控制原理 计算机采用二进制的优势 高电平与低电平电压波动受影响的可能性会降低,抗干扰能力强 什么是冯诺依曼计算机…

DBeaver连接GaussDB

DBeaver 官网:https://dbeaver.io/打开DBeaver,点击菜单栏 “数据库”>“驱动管理” 点击“新建” 填入下面内容: 驱动名称:GS 驱动类型:Generic 类名:org.postgresql.Driver URL模板:jdbc…

在pycharm上导出Anaconda3的环境配置文件

目录 1.原理: ​2.亲身实践: 1.原理: 要在PyCharm中导出Anaconda3环境的配置文件,可以使用conda命令行工具来完成。请按照以下步骤进行操作: 打开PyCharm,并确保项目使用的是Anaconda3环境。 在PyCha…

Linux训练营(文件和目录操作)

文章目录 前言一、ls命令二、cd命令三、mkdir命令四、cp命令五、rm命令总结 前言 本篇文章我们来讲解Linux中的文件和目录操作,在这里我们主要使用的是Linux中的命令来操作这些文件和目录,命令是Linux中最基础的部分。 一、ls命令 ls是一个常用的命令…

css基础知识十一:CSS3新增了哪些新特性?

一、是什么 css,即层叠样式表(Cascading Style Sheets)的简称,是一种标记语言,由浏览器解释执行用来使页面变得更为美观 css3是css的最新标准,是向后兼容的,CSS1/2的特性在CSS3 里都是可以使用…

SpringBoot源码分析(三):SpringBoot的事件分发机制

文章目录 通过源码明晰的几个问题Spring 中的事件Springboot 是怎么做到事件监听的另外两种注册的Listener 源码解析加载listenerSpringApplicationRunListenerEventPublishingRunListenerSimpleApplicationEventMulticaster判断 listener 是否可以接收事件Java 泛型获取 整体流…

解决 mac 系统报zsh: command not found: npm 问题

文章目录 1、报错zsh: command not found: npm2、解决办法 1、报错zsh: command not found: npm 根据提示:zsh: command not found: npm。说明没有找到 npm 命令,这说明有两种情况: 一是:你根本就没有安装 nodejs 的环境&#xf…