当前位置: 首页 > news >正文

Jmeter使用教程

一、接口测试

发布时间版本
2024-01-075.6.3
2023-07-115.6.2
2023-07-105.6.1
2023-06-235.6
2022-06-145.5
2021-12-245.4.3
2021-12-165.4.2
2021-01-225.4.1

找几台测试机子名字

断言与检查点一样

1.测试计划整体执行顺序

测试计划 → 线程组 → 配置元件 → 前置处理器 → 定时器 → 采样器 → 后置处理器 → 断言 → 监听器

2.请求数据格式

post请求要填写

image-20250703115949709

2.post请求传参位置

在Jmeter中post请求如果参数格式是表单与get请求传参的位置相同

image-20250702200030256

如果是参数格式是json格式填写在消息实体中

image-20250702200836030

如果请求入参是Query,直接拼接在路径后

image-20250704105044223

3.全局变量

全局变量在Jmeter中称为用户参数

调用方式为${变量名}

image-20250702200228745

4.Cookie管理器

自动保存cookie时,将每次反复清除cookies勾选,可保持cookie最新,自动保存cookie时,在cookie管理器中是看不到的。

手动加入cookie

image-20250702201341443

5.对文件进行参数化

内置函数使用说明:https://jmeter.apache.org/usermanual/functions.html#__BeanShell

  • 生成函数后,复制生成的函数,直接在调用的位置复制函数即可使用
  • 文件路径的相对路径为脚本的存储位置

image-20250702212810054

6.CSV数据文件设置

3914197bd23bd290d4cc403b3310a20c

7.正则表达式提取器

  • 公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
  • .:是通配符,可以代表任意字符(除换行回车)
  • +:代表前面的字符出现1次或者多次
  • *: 代表前面的字符出现0次或者多次
  • .*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
  • ?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找

img

111:表示提取第一个捕获到的内容(第一个括号捕获到的内容)

8.Json提取器

img

9.HTTP请求默认值

将一些重复的内容填写在里面,后面的请求就不需要再填写

image-20250704100754170

10.跨线程组关联

  • 保存JMeter属性:setProperty——放入BeanShell取样器中执行
  • 读取JMeter属性:Property——放入到第二个线程组的http请求中

setProperty 是一个用于设置属性值的方法,将局部变量,赋值给一个属性值。

Property 是一个用于调用(获取)属性值的函数

通过 setProperty 动态设置的属性值会存活在整个测试计划的运行期间。

11.MIME类型

  • 测试上传文件接口

MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)是互联网上用来标识文件格式的一种标准。它最初是为了在电子邮件中传输不同类型的内容(如文本、图片、音频等)而设计的,后来也被广泛应用于Web开发、文件传输等领域。

MIME类型的构成

MIME类型由两部分组成:类型(type)和子类型(subtype),中间用斜杠“/”分隔。例如:

  • text/html:类型是text,子类型是html,表示HTML文本文件。
  • text/plain:纯文本文件。
  • image/jpeg:类型是image,子类型是jpeg,表示JPEG格式的图片。
  • application/postscript:它主要用于描述页面的布局、图形、文字等内容,广泛应用于打印、排版和图形设计领域。PostScript 文件是一种文本文件,包含了一系列的 PostScript 命令,用于指示打印机或绘图设备如何生成页面内容。

12.抓包

  • 在测试计划中添加HTTP测试脚本记录器、查看结果树,创建线程组,选择目标控制器
  • 手动开代理设置代理指向Jmeter(这时可以刷新一下页面,应该是打不开网页的,因为Jmeter代理还没有开启)
  • 在Jmeter的测试脚本记录器中,点击启动
  • 操作网页,就会将抓取的内容放在线程组中

image-20250714141304670

image-20250714141544214

image-20250714141849350

二、连接数据库

Illegal:非法的,declared:宣布,宣告

测试计划中配置JDBC的jar包

image-20250707191844185

线程组–>配置元件–>JDBC Connection Configuration

pool:池子

image-20250707191445201

不同操作对应的类型

image-20250707115438077

1.对数据库查询内容参数化

image-20250707192550105

  • 使用ForEach遍历,“ForEach” 在中文中的意思是 “遍历”
  • 使用计数器计数器更灵活

计数器注意事项变量中套变量需要使用V函数

image-20250707192753534

三、MD5加密

添加–>前置处理器–>BeanShell PreProcessor

image-20250707194454681

编写BeanShell脚本

/*Bx-Auth-TimeStamp:当前系统时间,格式:yyyyMMddHHmmss;Bx-Auth-Key:子账户操作就是子账户Key 创建子账户就是总账户AccountSecret;Bx-Auth-SignType:采用 MD5 大写 32 位加密,a.创建子账号内容为:AccountKey=xxxx&Authkey=AccountSecret&timeStamp=yyyyMMddHHmmss;b.其他的,比如创建用户时,内容为:AccountKey=xxxx&Authkey=AppKey&timeStamp=yyyyMMddHHmmss;*/
//java语法
//变量仅在这个文件内有效// 导入MD5加密需要用到的jar包。
import org.apache.commons.codec.digest.DigestUtils;//声明拼接加密字符串需要的变量
String AccountKey="zhangsan";
String Authkey="bb7a5b21923146fda22a958486709649";
String timeStamp="${__time(yyyyMMddHHmmss,)}";//拼接加密字符串
String str1="AccountKey="+AccountKey+"&Authkey="+Authkey+"&timeStamp="+timeStamp;//对str1进行md5加密
String str2=DigestUtils.md5Hex(str1);
//将str2转换为大写
String str3=str2.toUpperCase();//提取18位
String str4 = str3.substring(7, 25);//日志打印
log.info("字符串: " + str3);//将str3输出为可供外部组件调用的变量
vars.put("str5",str4);
vars.put("timeStamp",timeStamp);
vars.put("Authkey",Authkey);

四、jmeter录制脚本

HTTP(S)测试脚本记录器

五、逻辑控制器

ForEach控制器,通常与用户定义的变量一同使用

IF 控制器

仅一次控制器

交替控制器

  • 忽略子控制器块
  • Interleave across threads:跨线程组交替:每个线程第一个请求是上次线程的第二次请求

随机控制器

随机顺序控制器

循环控制器

while控制器

  • LAST :当 While 控制器下 最后一个 样例执行失败后 跳出循环

遇到socket可以让开发协助

六、定时器

https://testerhome.com/topics/38450

1.固定定时器

固定定时器可设置一个固定的时间值,需要注意的是固定定时器的作用域。
作用域:看固定定时器的爹是谁,它爹的作用域就是它的作用域。
设定固定定时器后,其作用于它有效的区域中的每一个请求,每一个请求都会有固定的停顿时间。
一、图中延时 2000 毫秒=2 秒,作用于整个线程组,请求 1 和请求 2 都延迟 2 秒

img

2.同步定时器

在 jmeter 中的集合点,其实就是同步定时器,在里面可以设置要达到的用户数量以及超时时间。
同步定时器的作用域和固定定时器相同。
同步定时器属性:
1,模拟用户组的数量:图中设置数量为 10,意思是需要在脚本的执行过程中,到达请求 2 的线程必须有 10 个,才能允许 10 个线程同时发起请求。如果线程数不足 10,请求不发起,已到达请求 2 的线程等待,等到达请求 2 的线程数足够 10 时,10 个线程同时发起请求 2。
2,超时时间:图中设置 5000 毫秒=5 秒,意思是,如果线程到达请求 2,线程数不足 10,开始等待,等待时间超过 5 秒,即使到达请求 2 的线程数依然不足 10,已到达的线程依然发起请求 2。
图中同步定时器,设置在事务控制器下,事务控制器下的请求 2 和请求 3,都会在到达请求的线程数足 10 时,才发起请求。

img

3.常数吞吐量定时器

常数吐出量

七、线程组

1.setup线程组

前置线程组:可以用于预置测试数据,如登录、获取 token 等

2.线程组

image-20250718211649548

3.teardown线程组

后置线程组:可以用于退出登录、删除测试数据、释放资源

==注:==如果这三个线程组同时存在,执行顺序是setup线程组-线程组-teardown线程组;一般setup线程组和teardown线程组不用。

4.jpgc插件带来的线程组

学习链接:https://blog.csdn.net/xy_best_/article/details/106242332

1.阶梯式加压线程组(stepping thread group)

image-20250718213226434

2.终极线程组(ultimate thread group)
  • 相当于n个标准线程组的叠加,一般适用于错峰场景

5b67c80d895233934f24033998955b51

image-20250718214000204

八、压测

1.添加监听器

1)聚合报告参数详解
  • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
  • #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
  • Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
  • Median:中位数,也就是 50% 用户的响应时间
  • 90% Line:90% 用户的响应时间
  • Min:最小响应时间
  • Max:最大响应时间
  • Error%:错误率——错误请求数/请求总数
  • Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  • Received KB/sec(每秒接收的KB):每秒钟从服务器接收到的数据量。这个指标显示了网络流量的输入。
  • Sent KB/sec(每秒发送的KB):每秒钟发送到服务器的数据量。这个指标显示了网络流量的输出。

image-20250718211045511

测试结果在聚合报告中对应的参数:

响应时间:90% 百分位 单位为毫秒;1秒以内为优秀,业内规则258;但是也要结合公司配置的,可以先办项目上线,再慢慢收紧

  • 2秒内为优秀,2-5秒为良好,5-8秒-较差

tps:吞吐量

吞吐率:接收+发送(KB/sec)

2)活跃的线程曲线

image-20250718211006477

3)响应时间曲线

image-20250718211020917

4)tps曲线

image-20250718210954886

2.线程组设置

image-20250718213226434使用Jmeter进行分布式压测

3.开始压测

观察性能指标,曲线,聚合报告

九、分布式压测及生成性能测试报告

1.环境准备
  • JDK/JMeter 版本:所有节点完全一致(建议 JMeter 5.6.3 + JDK 8)
  • 主控机和从控机连接同一个网络(主控机和从控机相互可以ping通)
  • 关闭防火墙、杀毒软件、安全管家等
  • 禁用多余的网络适配器(只留一个)
2.修改主控机与负载机配置

1)在负载机的电脑上面,只需要启动jmeter-server.bat的文件就可以了(需要配置jdk及jmeter的环境变量)

2)修改jmeter的bin目录下的jmeter.properties文件

# 将server.rmi.ssl.disable值修改为true,关闭ssl功能

image-20250717193649584

3)在主控机上面配置负载机的ip地址,配置方法是修改jmeter.properties文件中的remote_hosts信息,(此处端口号可以不填写,默认端口号就是1099)

remote_hosts=127.0.0.1,192.168.1.5,192.168.1.13
# 192.168.1.5,192.168.1.13这两个都是远程的负载机
# 127.0.0.1是主控机

image-20250717194141026

4)启动jmeter-server.bat文件

3.进行分布式测试
1)使用GUI界面

要保证主控机和负载机都能成功发送请求

第 1 步:主控机选择要执行的脚本

第 2 步:运行–>远程启动所有/远程启动

image-20250717195910895

2)使用命令

第 1 步:进入 JMeter bin 目录,在路径中输入cmd,回车

第 2 步:执行分布式压测并生成性能测试报告

jmeter -n -t D:\test\test.jmx -r -l D:\test\result.jtl -e -o D:\test\report

image-20250717201136485

十、命令行使用jmeter

第 1 步:进入 JMeter bin 目录,在路径中输入cmd,回车
第 2 步:在打开的cmd窗口中执行如下命令:

jmeter -n -t 要执行的jmeter脚本的全路径 -l 1.jtl文件 -e -o 测试报告生成的文件夹位置例如:jmeter -n -t C:\Users\Windows\Desktop\jmeter脚本\bugfree_login.jmx -l D:\result.jtl -e -o D:\report参数详解:
-n 以非GUI模式运行jmeter
-t 要执行的jmeter脚本的文件名
-l .jtl文件的位置(这个文件必须是不存在的)
-e 在脚本运行结束以后生成html格式报告
-o 性能测试报告将要存放的文件夹位置(这个文件夹必须是已经存在的空文件夹)
-r 表示的是远程启动所有机器

十一、生成性能测试报告

用现有的.jtl文件生成html版性能测试报告:

1.使用命令

jmeter -g .jtl文件的全路径 -o 存放测试报告的文件夹位置

2.使用GUI界面

image-20250717204750700

调整jmeter生成性能报告TPS曲线的采集频率

修改user.properties文件的

jmeter.reportgenerator.overall_granularity=1000

image-20250717202215934

http://www.dtcms.com/a/285780.html

相关文章:

  • 闭包的定义和应用场景
  • [安洵杯 2019]easy_web
  • 深度学习×第10卷:她用一块小滤镜,在图像中找到你
  • DOM 文档对象模型
  • 【移动端知识】移动端多 WebView 互访方案:Android、iOS 与鸿蒙实现
  • Esbuild-新一代极速前端构建打包工具
  • 基于单片机多功能称重电子称设计
  • 前端下载文件并按GBK编码解析内容
  • C#`Array`进阶
  • Java全栈面试实录:从Spring Boot到AI大模型的深度解析
  • 现代R语言机器学习:Tidymodel/Tidyverse语法+回归/树模型/集成学习/SVM/深度学习/降维/聚类分类与科研绘图可视化
  • 135. Java 泛型 - 无界通配符
  • 【PTA数据结构 | C语言版】二叉堆的朴素建堆操作
  • 防爆手机是什么?能用普通手机改装吗?
  • 国产替代:ASP4644在电信通信设备中的测试与应用前景
  • 上网行为管理-web认证服务
  • Kotlin封装
  • JVM常用运行时参数说明
  • 机器人行业10年巨变从协作机器人到具身智能的萌芽、突破和成长——从 Automatic慕尼黑10 年看协作机器人到具身智能的发展
  • 基于单片机汽车驾驶防瞌睡防疲劳报警器自动熄火设计
  • Git--本地仓库的学习
  • 深入解析Linux系统启动全流程
  • 【Leecode 随笔】
  • 系统分析师-计算机系统-指令系统多处理机系统
  • 【案例教程】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用
  • 如何将 iPhone 备份到笔记本电脑?
  • mac mlx大模型框架的安装和使用
  • Web前端入门:JavaScript async await 的异步任务进化之路
  • 深入解析文本分类技术全景:从特征提取到深度学习架构
  • 【项目】MCP+GraphRAG搭建检索增强智能体