做网站的几个步骤/长沙网站推广智投未来
1.简介
在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有一定的指导和参考学习价值,遇到类似的问题脑子一片空白的童鞋们可以参考一下。
2.建立数据库测试计划
在本节中,您将学习如何创建基本的测试计划以测试数据库服务器和操作数据库(增、删、改、查)。本示例使用MySQL数据库驱动程序。要使用该驱动程序,必须将其包含的.jar文件(例如mysql-connector-java-XXX-bin.jar)复制到JMeter ./lib目录。
2.1新建测试计划
首先启动JMeter我们新建一个测试计划,如下图所示:
2.2添加用户
新建完测试计划以后,我们前边也讲过了,这时候就要添加用户了。你要对每个JMeter测试计划进行的第一步是添加一个线程组(用户)。线程组告诉JMeter您要模拟的用户数量,用户应多久发送一次请求以及应发送多少次请求。
添加用户的步骤:首先选择“测试计划”来添加ThreadGroup元件,单击鼠标右键以获得“ 添加”菜单,然后选择“ 添加” →“ ThreadGroup”。
添加完用户以后,你应该在“测试计划”下可以看到“线程组”元素。如果没有看到该元素,则通过单击“测试计划”元素前边的“ + ”来展开 “测试计划”树,就可以看到你添加的用户了。
最后,你需要修改默认属性(如果需要修改,不需要修改默认即可)。如果尚未选择线程组元素,则在树中选择它。那么你就可以在“ JMeter”窗口的右侧部分中看到“线程组控制面板”,如下图所示:
2.3添加JDBC连接配置
通过上边的操作,我们已经定义了用户,然后我们必须定义这些用户所要去的目的地,和目的地建立联系。不要这些用户累死累活的干了半天的活,知不道是为谁干得活。在本部分中,你需要和目的地建立联系。
具体步骤:首先选择ThreadGroup元件。单击鼠标右键获得“ 添加”菜单,然后选择“ 添加” →“ 配置元素” →“ JDBC连接配置”。然后,选择此新元件以查看其控制面板。我们需要设置一些字段,这些字段相当于谍战片中的接头暗号,例如:《智取威虎山》杨子荣与坐山雕的接头暗号:脸红什么?精神焕发。怎么又黄拉?度防冷涂的蜡;长江长江我是黄河,等等。暗号对上了,才可以建立联系。否则认为有危险,不是建立联系,具体在测试中的表现就是报错了!!!
设置以下字段(这些假设我们将使用名为“hongge ” 的MySQL数据库):
- Variable Name(绑定到池的变量名称):该名称自定义,在JDBC Request会用到;这需要唯一地标识配置。JDBC Sampler使用它来标识要使用的配置。
- Database URL(数据库URL):jdbc:mysql:// 数据库IP地址:数据库端口/数据库名称(例如宏哥本地搭建MySQL:jdbc:mysql://localhost:3306 / hongge)
- JDBC Driver Class(JDBC驱动程序类):com.mysql.jdbc.Driver
- Username(用户名):数据库连接的用户名
- Password(密码):数据库连接的密码
注意:敲脑壳,敲黑板啦!!!
JMeter使用“控制面板”中指定的配置设置创建数据库连接池。在“ 变量名 ”字段的JDBC请求中引用该池。可以使用几种不同的JDBC Configuration元素,但是它们必须具有唯一的名称。每个JDBC请求必须引用一个JDBC配置池。一个以上的JDBC请求可以引用同一个池。
连接配置的控制面板的其他字段可以保留为默认值。如下图所示:
2.4添加JDBC请求
通过上边的操作,我们已经定义了用户并且已经知道目的地和接头人建立了联系之后,然后我们就需要给这些用户分配具体的任务了(谁负责监视,谁负责刺杀,谁负责放哨)。在本部分中,你将指定要执行的JDBC请求(刺杀任务)。
具体步骤:选择ThreadGroup元件。单击鼠标右键获得“ 添加”菜单,然后选择“ 添加” →“ 采样器” →“ JDBC请求”。然后,选择此新元素以查看其控制面板。
JMeter按照将请求添加到树中的顺序发送请求。
首先编辑以下属性
- Variable name:这里写入数据库连接池的名字(和JDBC Connection Configuration名字保持一致 )
- Query:里面填入查询数据库数据的SQL语句(填写的SQL语句末尾不要加“;”)
- parameter valus:数据的参数值
- parameter types:数据的参数类型
- cariable names:保存SQL语句返回结果的变量名
- result cariable name:创建一个对象变量,保存所有返回结果
- query timeout:查询超时时间
- handle result set:定义如何处理由callable statements语句返回的结果
如下图所示:
其中Query Type(SQL语句类型)包含十个类型,每个类型作用都不同,下面分别介绍。
1、Select statement
这是一个查询语句类型;如果JDBC Request中的Query内容为一条查询语句,则选择这种类型。
PS:多个查询语句(不使用参数的情况下)可以放在一起顺序执行,需要设置Query Type为:Callable Statement;
如果Query Type为:select Statement,则只执行第一条select语句。
2、Update statement
这是一个更新语句类型(包含insert和update);如果JDBC Request中的Query内容为一条更新语句,则选择这种类型。
PS:如果该类型下写入多条update语句,依然只执行第一条(原因同上,具体下面介绍)。
3、Callable statement
这是一个可调用语句类型,CallableStatement 为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。
已储存过程储存在数据库中,对已储存过程的调用是 CallableStatement 对象所含的内容。
这种调用是用一种换码语法来写的,有两种形式:一种形式带结果参数,另一种形式不带结果参数;结果参数是一种输出 (OUT) 参数,是已储存过程的返回值。
两种形式都可带有数量可变的输入(IN 参数)、输出(OUT 参数)或输入和输出(INOUT 参数)的参数,问号将用作参数的占位符。
在 JDBC 中调用已储存过程的语法如下所示。注意,方括号表示其间的内容是可选项;方括号本身并不是语法的组成部份。
{call 过程名[(?, ?, ...)]},返回结果参数的过程的语法为: {? = call 过程名[(?, ?, ...)]};
不带参数的已储存过程的语法类似:{call 过程名}。
4、Prepared select statement
statement用于为一条SQL语句生成执行计划(这也是为什么select statement只会执行第一条select语句的原因),如果只执行一次SQL语句,statement是最好的类型;
Prepared statement用于绑定变量重用执行计划,对于多次执行的SQL语句,Prepared statement无疑是最好的类型(生成执行计划极为消耗资源,两种实现速度差距可能成百上千倍);
PS:PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行。
5、Prepared update statement
Prepared update statement和Prepared select statement的用法是极为相似的,具体可以参照第四种类型。
6、Commit
commit的意思是:将未存储的SQL语句结果写入数据库表;而在jmeter的JDBC请求中,同样可以根据具体使用情况,选择这种Query类型。
7、Rollback
rollback指的是:撤销指定SQL语句的过程;在jmeter的JDBC请求中,同样可以根据需要使用这种类型。
8、AutoCommit(false)
MySQL默认操作模式就是autocommit自动提交模式。表示除非显式地开始一个事务,否则每条SQL语句都被当做一个单独的事务自动执行;
我们可以通过设置autocommit的值改变是否是自动提交autocommit模式;
而AutoCommit(false)的意思是AutoCommit(假),即将用户操作一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务重新开始一个新的事务。
9、AutoCommit(true)
这个选项的作用和上面一项作用相反,即:无论何种情况,都自动提交将结果写入,结束当前事务开始下一个事务。
10、编辑(${})
jmeter中的JDBC请求中的SQL语句是无法使用参数的,比如: SELECT * FROM ${table_name} 是无效的。
如果需实现同时多个不同用户使用不同的SQL,可以通过把整条SQL语句参数化来实现;(把SQL语句放在csv文件中,然后在JDBC Request的Query 中使用参数代替 ${SQL_Statement})。
备注:后面的七项项涉及到数据库的事务控制等知识点,如果有不明白的地方请自行查询相关知识。
2.5添加侦听器以查看/存储测试结果
您需要添加到测试计划中的最后一个元件是 Listener。该元素负责将JDBC请求的所有结果存储在文件中并显示结果。
具体步骤:选择ThreadGroup元件并添加一个结果树的侦听器(添加 → 侦听器 → 结果树)。
侦听器显示结果及控制面板。如下图所示:
2.6保存测试
在菜单点击“保存”按钮图标,选择保存位置,点击“Save”保存测试计划,如下图所示:
2.7运行测试
保存测试计划以后,在菜单运行 → 开始或 Ctrl + R运行测试,如下图所示:
3.小结
好了今天的创建数据库测试计划就分享到这里,下一篇带着小伙伴和童鞋们实战一下,小试一下牛刀。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】
【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】
一、Python编程入门到精通

二、接口自动化项目实战
三、Web自动化项目实战

四、App自动化项目实战
五、一线大厂简历

六、测试开发DevOps体系
七、常用自动化测试工具

八、JMeter性能测试
九、总结(文末尾部小惊喜)
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!
生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!
只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!
相关文章:

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)
1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙…...

swagger 3.0 学习笔记
引入pom <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置 import io.swagger.models.auth.In; import io.swagger.v3.oas.annotati…...

07 |「异步任务」
前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、进程与线程1、进程2、线程 二、实现 一、进程与线程 1、进程 进程(Process)是操作系统分配资源的基本单位,它是一个执行中的程序实例;每个进程都有自己独立的内存空间,不同进程的内存是相互独…...

LoRaWan网关设计之入门指南
快速开始 以下是在目标平台本身上构建和运行 LoRaWan网关 的三步快速入门指南。 第 1 步:克隆 网关源码库 git clone https://github.com/lorabasics/basicstation.git...

互联网电影购票选座后台管理系统源码开发
搭建一个互联网电影购票选座后台管理系统需要进行以下步骤: 1. 需求分析:首先要明确系统的功能和需求,包括电影列表管理、场次管理、座位管理、订单管理等。 2. 技术选型:选择适合的技术栈进行开发,包括后端开发语言…...

[ K8S ] yaml文件讲解
目录 查看 api 资源版本标签写一个yaml文件demo创建资源对象查看创建的pod资源创建service服务对外提供访问并测试//创建资源对象查看创建的service写yaml太累怎么办? Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式:主要用于 api 接口之间消…...

【《深入浅出计算机网络》学习笔记】第1章 概述
内容来自b站湖科大教书匠《深入浅出计算机网络》视频和《深入浅出计算机网络》书籍 目录 1.1 信息时代的计算机网络 1.1.1 计算机网络的各类应用 1.1.2 计算机网络带来的负面问题 1.2 因特网概述 1.2.1 网络、互联网与因特网的区别与关系 1.2.1.1 网络 1.2.1.2 互联网 …...

二、Linux中权限、shell命令及运行原理
shell命令及运行原理 我们使用Linux时,并不是直接访问操作系统,为什么不是直接访问操作系统呢? 如果用户直接访问操作系统,不仅使用难度大,而且不安全,容易把系统文件损坏。 那么我们通常是如何访问操作系统…...

【RabbitMQ上手——单实例安装5种简单模式实现通讯过程】
【RabbitMQ入门-单实例安装&5种简单模式实现通讯过程】 一、环境说明二、安装RabbitMQ三、用户权限及Virtual Host设置四、5种简单模式实现通讯过程的实现五、小结 一、环境说明 安装环境:虚拟机VMWare Centos7.6 Maven3.6.3 JDK1.8RabbitMQ版本:…...

python+pytest接口自动化之HTTP协议基础
HTTP协议简介 HTTP 即 HyperText Transfer Protocol(超文本传输协议),是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型…...

【技巧】如何保护PowerPoint不被改动?
PPT,也就是PowerPoint,是很多小伙伴在工作生活中经常用到的图形演示文稿软件。 做好PPT后,担心自己不小心改动了或者不想他人随意更改,我们可以如何保护PPT呢?下面小编就来分享两个常用的方法: 1. 将PPT改…...

【APITable】教程:创建并运行一个自建小程序
1.进入APITable,在想要创建小程序的看板页面点击右上角的【小程序】,进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序,选择模板,输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…...

使用MyBatis操作数据库
hi,大家好,今天为大家带来MyBatis操作数据库的知识 文章目录 🐷1.根据MyBatis操作数据库🧊1.1查询操作🍇1.1.1无参查询🍇1.1.2有参查询 🧊1.2删除操作🧊1.3修改操作🧊1.4增加操作🧊…...

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]
文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…...

Qt应用程序窗体最大化失效问题的解决方法
记录一个在Qt开发过程中遇到的问题: 【问题描述】在showEvent中调用showMaximized(),应用程序窗体仍然无法最大化。 【定位分析】在Qt应用程序中,如果窗体最大化失效,可能是因为在窗体的showEvent事件中使用了showMaximized()方…...

python怎么判断变量的数据类型
在编程的世界里,了解各种数据类型是非常重要的。在Python中,有着丰富的数据类型用于存储和处理不同类型的数据。掌握这些数据类型的定义和作用,我们能够更好地在程序中管理和操作数据,提高代码的效率和可读性。 Python中常见的数据…...

FastAPI 构建 API 高性能的 web 框架(二)
上一篇 FastAPI 构建 API 高性能的 web 框架(一)是把LLM模型使用Fastapi的一些例子,本篇简单来看一下FastAPI的一些细节。 有中文官方文档:fastapi中文文档 假如你想将应用程序部署到生产环境,你可能要执行以下操作&a…...

如何实现 Java SpringBoot 自动验证入参数据的有效性
Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证 如果碰到 NotEmpty 否则不生效,注意看下 RequestBody 前面是否加上了Valid Validation常用注解汇总 Constraint详细信息Null被注释的元素必须为 nullNotNull被注释的元…...

golang学习随记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片,拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…...

【PCL-6】PCL基于凹凸型的分割算法(LCCP)
凹凸型分割算法适用于颜色类似、棱角分明的物体场景分割。LCCP方法不依赖点云颜色,只使用空间信息和法线信息。 算法流程: 1、基于超体聚类的过分割; 2、在超体聚类的基础上再聚类。 算法思路: 1、基于CC和SC判断凹凸性&…...

多进程并发服务器
文章目录 思路问题多进程并发回环服务器代码客户端代码 思路 每当一个客户端连接服务器后,创建一个子进程负责与该客户端通信,客户端断开连接之后,服务器回收子进程资源。 问题 问题1:父进程阻塞在等待连接(accept())处…...

2021秋招总结
2021 秋招总结 作为星球第一批准备秋招的人,经过这几个月的面试之后,感觉也算是有一些小小的经验了吧,就做一个简单的记录,希望能够为星球中准备秋招的伙伴们提供一些参考吧~ 序 4月初加入星球,到9月底,一…...

Linux6.34 Kubernetes yaml文件详解
文章目录 计算机系统5G云计算第三章 LINUX Kubernetes yaml文件详解一、yaml文件概述1.查看 api 资源版本标签2.写一个yaml文件demo 计算机系统 5G云计算 第三章 LINUX Kubernetes yaml文件详解 一、yaml文件概述 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式…...

防火墙笔记
什么是防火墙 在计算机网络中是指设置在可信任的内部网络和不可信任的外部网络之间的屏障,通过强化边界控制保障内容安全,同时不妨碍内部对外部的访问。 20世纪80年代,最早的防火墙几乎与路由器同时出现,第一代防火墙主要基于包过…...

使用代码下载开源的大模型文件示例以及中文微调llama资源汇总:
一、下载示例 from huggingface_hub import snapshot_downloadrepo_id "THUDM/chatglm2-6b" local_dir ./chatglm2-6b/ cache_dir local_dir "/cache" while True:try:snapshot_download(cache_dircache_dir,local_dirlocal_dir,repo_idrepo_id,loca…...

Wav2vec2 论文阅读看到的一些问题
Wav2vec2 论文阅读看到的一些问题 这里只是简单的思考一下论文的一些问题,不是论文解读。 Q1. 为什么wav2vec依旧需要Transformer来做推理,而不直接使用VQ生成的内容? A1. Transformer在更长的序列上有更好的编码效果,例如论文也写…...

爬虫学习记录(持续更新)
一、问题记录 1.使用webdriver报错AttributeError: str object has no attribute capabilities 解决:目前使用的selenium版本是4.11.2,可以不必设置driver.exe的路径,selenium可以自己处理浏览器和驱动程序,因此,使用…...

libevent源码学习1---创建event
libevent源码学习1—创建event Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的非阻塞网络库。安装请参考ubuntu下载安装libevent event_base 使用 libevent 函数之前需要分配一个或者多个 event_base 结构体。每个 event_base 结构体持有一个…...

Python类的设计
Python类的设计 # 定义一个闹钟类 class Clock:__cureen_keyNone # 私有成员不能改变和使用def __init__(self, id, price): # 类对象是立即自动执行self.id idself.price pricedef ring(self):import winsound # 内置声音方法winsound.Beep(2000,3000)clock1 Clock(…...

微信小程序的项目解构
视频链接 黑马程序员前端微信小程序开发教程,微信小程序从基础到发布全流程_企业级商城实战(含uni-app项目多端部署)_哔哩哔哩_bilibili 接口文档 https://www.escook.cn/docs-uni-shop/mds/1.start.html 1:微信小程序宿主环境 1:常见的宿…...