Jmeter连接数据库、逻辑控制器、定时器

news2024/11/25 8:14:41

Jmeter直连数据库

直接数据库的使用场景

image-20240605081008437

直连数据库的关键配置

  • 添加MYSQL驱动Jar包
    • 方式一:在测试计划面板点击“浏览”按钮,将你的JDBC驱动添加进来
    • 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter

image-20240605082136181

  • 配置数据库连接信息
    • 添加方式-测试计划->线程组->(右键添加)配置元件JDBC Connection Configuration

image-20240605082640475

参数介绍:

- Variable Name:mysql数据库连接池名称(JDBC请求时要引用)

- Database URL:jdbc:mysql://localhost:3306/tpshop2.0

​ - 组成:协议+数据库IP+数据库端口+连接的数据库名称

​ - JDBC DRIVER class:com.mysql.jdbc.Driver(MySQL驱动包 位置固定格式---- 下拉框)

​ - Username:root(连接数据库用户名,如实填写)

​ - Password:(MySQL数据库密码,如实填写,如果密码为空不写)

  • 添加JDBC请求

    - 添加方式:测试计划—线程组—取样器—JDBC Request

image-20240605084132911

参数介绍:

- Variable Name :数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound pool名字保持一致

- Query Type:

  • 查询操作:选择“select statement”
  • 增加、删除、修改操作:选择“Update Statement"

- Query:填写的SQL语句,末尾不要加";"

- Variable names:保存SQL语句返回结果的变量名

练习1:

1、连接tpshop商城数据库获取商品名包含:小米手机5的商品id

准备工作:

1.启动tpshop数据库服务器

2.添加MySQL驱动jar包

操作步骤:

  1. 添加线程组
  2. 添加 JDBC Connection Configuration

image-20240605221241739

  1. 添加 JDBC Request

image-20240605221316139

  1. 添加查看结果树

遇到问题

在使用 JMeter 进行 JDBC 查询数据库时,sql 语句使用英文和数字可以查询到记录,而使用中文则查询不到记录,而且使用相同的中文语句,可以在终端命令上和数据库管理工具上也可以查询到。

原因
以上问题是因为数据库使用的编码与jmeter 查询时,使用的编码不一致,导致查询的条件转换后不一致,导致查询不到正确记录或查询到错误记录。

JMeter 的默认编码是ISO-8859-1,而 mysql 数据库因为要存储中文信息,所以一般使用utf-8。在 JMeter 上填写的中文查询语句经字符编码转换到 mysql 上,不是之前填写的中文字段,导致查询条件失效了。

解决办法
在 JMeter 的 jdbc 链接配置插件上,连接 mysql 的 url上加useUnicode=true&characterEncoding=UTF-8即可解决问题。
在这里插入图片描述image-20240605220715027

image-20240605220737830

练习2:

1、在tpshop首页中搜索商品名称包含"小米手机5",

请求url:http://192.168.234.129/Home/Goods/search.html

请求方法:GET

请求参数:q

2、 在搜索的响应数据中检查是否有该商品对应的商品链接:/Home/Goods/goodsInfo/id/237.html

(id:237需要通过数据库查询返回,才保证每次都是有效的)

编写JDBC脚本步骤(搜索指定商品,在返回结果中检查是否包含指定商品的ID的详情URL)
1.添加线程组
2.添加 JDBC Connection Configuration
3.添加 JDBC request
4.添加 HTTP请求 - 搜索商品

image-20240605221844427

5.在搜索HTTP请求下,添加响应断言,检查响应结果中的字符 是否包含 商品URL。引用格式:${变
量名_索引}

image-202406052225517876.添加查看结果树

Jmeter逻辑控制器

如果(If)控制器

作用:If控制器用来控制它下面的测试元素是否执行

位置:测试计划–>线程组—>(右键添加)逻辑控制器—>如果(If)控制器

参数介绍

image-20240606081450409

练习:

1.使用“用户定义的变量”定义一个变量name,name的值可以是“baidu"或”itcast"

2.根据name的变量值实现对应网站的访问。

操作步骤:

1.添加线程组

2.用户定义的变量

image-20240606083105903

3.添加If控制器,判断name是否等于baidu

  • 不勾选Interpret Condition,“${name}”==“baidu”
  • 勾选,KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{name}"==“baidu”,)}

image-20240606083137073

4.添加HTTP请求,用来访问百度

image-20240606083252352

5.添加If控制器,判断name是否等于itcast

image-20240606083228150

6.添加HTTP请求,用来访问传智播客

image-20240606083305599

7.添加查看结果树

image-20240606083324417

循环控制器

作用:通过设置循环次数,来实现循环发送请求

位置:测试计划–>线程组–(右键添加)逻辑控制器—>循环控制器

参数介绍

image-20240606083616317

案例:1.循环访问百度10次

操作步骤:

1.添加线程组

2.添加循环控制器----设置循环次数

3.添加HTTP请求

4.添加查看结果树

image-20240606084012770

思考:线程组属性可以控制循环次数,那么循环器有什么用?

控制的作用域不同:线程组控制是线程组下的所有请求,循环控制器控制逻辑控制器下的所有请求

如果线程组循环次数为M,循环控制器循环次数为N:

  • 循环控制器下的HTTP请求运行:M*N次
  • 线程组下的其他HTTP请求运行:M次

image-20240606084724243

image-20240606084752945

ForEach控制器

作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值。

该控制器下的取样器都会被执行一次或多次,每次读取不同的变量值。

位置:测试计划—>线程组—>(右键添加)逻辑控制器—>ForEach控制器

image-20240606085325800

练习:

1.有一组关键字[hello,python,测试],使用用户定义的变量存储

2.要依次取出关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=hel

步骤:

1.添加线程组

2.添加用户自定义的变量

image-20240606090117217

3.添加ForEach控制器

image-20240606090155108

4.添加HTTP请求

image-20240606090227145

5.添加查看结果树

image-20240606090431079

与正则表达式配合使用(案例2)

案例2:
1. 访问黑马首页http://www.heima.cn,获取首页中的地址信息,并全部保存下来
2. 要依次取出地址关键字,并在百度搜索,例如:https://www.baidu.com/s?wd=地址

操作步骤:

1.添加线程组

2.添加HTTP请求1-heima

image-20240606091918011

3.在HTTP请求1下面,添加正则表达式提取器,提取出所有的地址信息

image-20240606091904069

4.添加ForEach控制器

image-20240606091955186

5.添加HTTP请求2-百度

image-20240606092013951

6.添加查看结果树

image-20240606092028684

  • 注意:结束循环字段可以设置为空,自动读取到最后一个

定时器

同步定时器

同步定时器:阻塞线程(累计一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力。

提示:在Jmeter中叫做同步定时器,在Loadrunner中又叫集合点

位置:测试计划–>线程组–>HTTP请求–>(右键添加)定时器—>Synchronizing Timer

image-20240606214205521

参数介绍

- Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量

- 若设置为0,等于设置为线程组中的线程数量。

- Timeout in millisseconds:超出时间,即超时多少毫秒后同时释放指定的线程数;

​ - 如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。

​ - 如果大于0,那么如果超过 Timeout in millisseconds中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程,默认为0.

练习1:

模拟100个用户同时访问百度首页,统计各种高并发情况下运行情况。

操作步骤:

1.添加线程组-设置线程数100人

2.添加HTTP请求

3.添加同步定时器,并发数可分别设置20/30人

  • 设置并发线程数:同时发送请求的虚拟用户数
  • 设置超时时间:
    • 建议设置:不设置的话,没有达到设置的线程数会一直死等。
    • 不能设置太小:等待时间后还没达到设置的线程数,会释放已到达的线程。

4.添加查看结果树

5.添加监听器-聚合报告

image-20240607081328768

常数吞吐量定时器

作用:让JMeter按指定的吞吐量执行,以每分钟为单位

位置:测试计划–>线程组—>HTTP请求–>(右键添加)定时器—>Constant Throughput Timer

image-20240607082153631

参数介绍:

- 目标吞吐量:每个用户每分钟发送的请求数

案例要求

  • 模拟用户真实的业务场景要求:20 QPS
  • 如果线程数设置为1,则目标吞吐量设置为20*60=1200
  • 如果线程数设置为2,则目标吞吐量设置为20*60/2=600

练习:

(1) 一个用户以20 QPS(20次/S)的频率访问百度首页,持续一段时间,统计运行情况

image-20240607083657834

(2)2个用户针对 (服务器的QPS要求:20QPS (20 次/s)) 的频率访问百度首页,持续一段时间,统计运行情况

image-20240607083844738

操作步骤:

1.添加线程组,循环次数设置成永远

2.添加HTTP请求

3.添加常数吞吐量定时器

  • 设置目标吞吐量:每个用户每分钟发送的请求数
  • 计算方法:要求QPS*60/线程数

4.添加查看结果树

5.添加监听器-聚合报告

固定定时器

案例:
(1)IHRM系统登录错误3次后,锁定1分钟,等待1分钟后重新输入正确的用户名密码登录成功
请求方法:POST
请求URL:http://ihrm-java.itheima.net/api/sys/login
请求头:Content-Type: application/json;charset=UTF-8
请求体:{“mobile”:“13800000002”,“password”:“888itcast.CN764%…”}

操作步骤:

1.添加线程组

2.添加HTTP请求1-错误1次

3.添加HTTP请求2-错误2次

4.添加HTTP请求3-错误3次

5.添加HTTP请求4-正确用户名密码

6.在HTTP请求4下,添加固定定时器

7.添加查看结果树

image-20240607085714611

image-20240607085556830

注意

  • 固定定时器,必须添加在需要等待的HTTP请求的子节点下
  • 在HTTP信息头管理中,修改HTTP请求的头域

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第二十三天

题目:39. 组合总和 这道题目和组合差不多 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 还有就是重复的如何进行剔除的方法如何实现 其实出现这个问题是因为没有理解startIndex的作用 详细看视频的 4分钟开始的地方…

java学习笔记(持续更新中...)

Java 中的基本数据类型主要包括以下7种: byte:字节型,占用 1 字节,范围-128 到 127。char:字符型,占用 2 字节,范围 0 到 65535。short:短整型,占用 2 字节,…

Linux基础 (十五):TCP 协议特点和UDP协议

上一节,我们学习了TCP协议的服务器-客户端的编程流程以及对中间的过程进行了详细的讨论,那么,这一节,我们对于TCP协议的特点进行进一步的分析,这也是面试的重点和难点。 目录 一、TCP 协议特点 1.1 连接的建立与断…

【内网攻防实战】红日靶场(一)续篇_金票与银票

红日靶场(一)续篇_权限维持 前情提要当前位置执行目标 PsExec.exe拿下域控2008rdesktop 远程登录win7msf上传文件kail回连马连上win7upload上传PsExec.exe PsExec.exe把win7 带到 2008(域控hostname:owa)2008开远程、关防火墙Win7…

汇编:数组-寻址取数据

比例因子寻址: 比例因子寻址(也称为比例缩放索引寻址或基址加变址加比例因子寻址)是一种复杂的内存寻址方式,常用于数组和指针操作。它允许通过一个基址寄存器、一个变址寄存器和一个比例因子来计算内存地址。 语法 比例因子寻…

Java Web学习笔记30——打包部署

打包: 到资源管理器中再看下: 将这些文件压缩成一个zip文件,然后到nginx的html目录中执行unzip 解压即可。 部署: Nginx:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代…

FreeRTOS基础(十三):队列集

队列集(Queue Set)通常指的是一组队列,它们可以用于处理不同的任务或数据流。每个队列可以独立地处理自己的元素,但作为一个集群,它们可以协同工作来完成更复杂的任务。下面进行介绍。 目录 一、队列集简介 二、队列…

OPenCV的重要结构体Mat

一 Mat Mat是什么? Mat有什么好处? class CV_EXPORTS Mat{ public: ... int dims;//维数 int rows,cols;//行列数 uchar *data;//存储数据的指针 int *refcount;//引用计数 ...};二 Mat属性 三 Mat拷贝 1 Mat浅拷贝 Mat A Aimread(file,IMREAD_COLOR) …

标准发布实施 |《新能源电池工业废水处理技术指南磷酸铁锂电池》

T/ACEF 130-2024《新能源电池工业废水处理技术指南磷酸铁锂电池》欢迎各单位引用执行!有课题也可联合立项! 发布日期:2024年02月04日 实施日期:2024年03月01日 主要起草人:刘愿军、孙冬、丁炜鹏、何小芬…

《解决方案架构师修炼之道》读书笔记

1. 水在前面 第一次看到“解决方案架构师”这个词,就把这本书借回家翻了。最近也在网上看点资料,对比起来发现还是出版物内容更完整和更有体系,而且看书真的能让人安静下来。。。 《解决方案架构师修炼之道》所罗伯死里瓦斯塔瓦,内…

Centos修改默认端口22

修改Centos服务器ssh链接的默认端口22到任意端口,主要两个步骤: 修改配置文件,添加端口开放防火墙 一、 vim /etc/ssh/sshd_config 在文件中 #Port 22 行下增加 # Port 22 Port [修改后端口]注意: 这里 先将其中的#Port 22前的…

!力扣102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] /*** Definition for…

计算机组成原理之指令寻址

一、顺序寻址 1、定长指令字结构 2、变长指令字结构 二、跳跃寻址 三、数据寻址 1、直接寻址 2、间接寻址 3、寄存器寻址 寄存器间接寻址 4、隐含寻址 5、立即寻址 6、偏移寻址 1、基址寻址 2、变址寻址 3、相对寻址

C++程序设计:对数据文件的操作与文件流

姚老师小课堂开课啦! 一、文件的分类: 1.ASCII码文件: ASCII文件使用方便,比较直观,便于阅读,便于对字符进行输入输出,但一般占用存储空间较多,而且需要花费转换时间(二…

【JAVASE】面向对象编程综合案例--------模仿电影信息系统

需求: (1)展示系统中的全部电影(每部电影展示:名称、价格) (2)允许用户根据电影编号(ID)查询出某个电影的详细信息。 目标:使用所学的面向对象…

问题排查: Goalng Defer 带来的性能损耗

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言问题背景结论 引言 性能优化之路道阻且长,因为脱敏规定,…

TinyVision V851s 使用 OpenCV + NPU 实现 Mobilenet v2 目标分类识别

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦! 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频,并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能......并…

Springboot整合SpringCache+redis简化缓存开发

使用步骤&#xff1a; 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupI…

定个小目标之刷LeetCode热题(14)

了解股票的都知道&#xff0c;只需要选择股票最低价格那天购入&#xff0c;在股票价格与最低价差值最大时卖出即可获取最大收益&#xff0c;总之本题只需要维护两个变量即可&#xff0c;minPrice和maxProfit&#xff0c;收益 prices[i] - minPrice,直接用代码描述如下 class …

AIRNet模型使用与代码分析(All-In-One Image Restoration Network)

AIRNet提出了一种较为简易的pipeline&#xff0c;以单一网络结构应对多种任务需求&#xff08;不同类型&#xff0c;不同程度&#xff09;。但在效果上看&#xff0c;ALL-In-One是不如One-By-One的&#xff0c;且本文方法的亮点是batch内选择patch进行对比学习。在与sota对比上…