news 2026/6/26 14:45:10

Jmeter 压测保姆级入门教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jmeter 压测保姆级入门教程

1、Jmeter本地安装

官方文档地址: jmeter.apache.org/index.html

1.1、下载安装

软件下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/选择一个压缩包下载即可然后解压缩后进入bin目录直接执行命令jmeter即可启动

1.2 修改语言

默认是英文的,修改中文,点击选项-》选择语言-》简体中文

1.3 必备插件安装

jmeter内置的常用的插件不是很多,如果要额外安装其他插件需要先下载一个插件安装工具的jar包然后放到jmeter的目录下才能使用插件安装工具的功能。

  1. 插件安装工具下载地址

2)下载jar包之后放到 jmeter的/lib/ext目录下,重启Jmeter即可。

3 打开插件管理。 选项-》 插件管理器

  1. 点击可用插件tab,然后勾选安装即可

推荐勾选: 带jpgc相关的插件,可以做梯度增压

1.4 修改Jmeter的堆内存

由于压测是通过Jmeter这个Java程序去跑的,所以压测的性能和能开启的线程数量都与这个程序本身运行的环境以及配置有关。 一般Jmeter部署在服务器那边性能会更强。

修改jmeter的/bin/jmeter文件 (mac环境),如果是window修改jmeter.bat。 修改下图的这一行就是调整堆内存信息

${HEAP:=“-Xms1g -Xmx8g -XX:MaxMetaspaceSize=656m”}

验证是否修改成功,重启使用jconsole工具连接Jmeter进程查看jvm信息即可看到是否修改成功。 或者使用jps命令查看进程号然后再jmap命令查看堆内存分配情况。

2、 Jmeter操作说明

2.1、测试计划

默认打开的界面如下, 一份测试计划就是一份jmx文件,点击保存就会弹出保存地址。 测试计划就是包含此次做压测的所有信息。 支持导入导出。

2.2 测试计划界面介绍

异常信息

  • 右上角那个小三角可以看到jemter的执行信息,如果你的压测执行不了可以去里面看看一般是报错了

用户自定义变量

  • 可以在这里配置压测的全局变量,这样我们在使用的时候就不用传具体的值,传变量的值即可。 这样以后要修改的话只需要修改这里的变量值就可以了就不用到处都修改了。
  • 比如我们压测的接口的域名肯定是都一样所以一般会提取出来做全局变量。比如下面配置全局变量域名host, 然后使用的时候就直接配${host}即可。

2.3、配置元件

默认支持的配置元件列表,主要作用就是配置我们压测接口的一些参数配置

2.3.1、Http请求默认值

操作: 右键点击测试计划-》 添加-》 配置元件-》 Http请求默认值组件

作用

  • 一般压测的接口的很多请求参数可能是一致的。 所以这里可以设置压测接口时的默认请求参数。 这样就不用每次配压测接口都去配置,默认会带上这里配置的请求参数。

比如下图配置默认的http协议,以及默认的域名。 这里的域名配置就使用我们前面配置的全局变量${host}

2.3.2、HTTP信息头管理器

操作: 右键点击测试计划-》 添加-》 配置元件-》 HTTP信息头管理器

作用

  • Http请求默认值配置元件类似,都是配置压测接口的请求默认值。 不过这个元件就像其名字一样配置的是默认的Http请求头信息,这样压测接口就不用再配置Http请求头信息默认会带上
  • 比如我们可以配置常用的默认的请求头Content-TypeCookie。 尤其是Cookie请求头 这样即使是登录接口也能进行调通。

2.3.3、CSV Data Set Config

操作: 右键点击测试计划-》 添加-》 配置元件-》 CSV Data Set Config

作用

  • 一般用于模拟生成不同的请求参数。 因为一般我们对一个接口进行压测真实的场景是请求参数是不同的

具体配置如下:

  • 主要是先配置一个csv文件的地址,然后指定列头变量字段名。 之后再配置压测接口的时候就可以把使用这些变量字段名。使用格式为:{变量名称}。 比如下面配置使用格式就是{userName}.
  • 这样在请求压测接口的时候就会来随机读取这个csv文件的这个变量对应的列的某一个的值, 一般我们就是通过这个组件去模拟不同的请求参数。

2.4、线程组

线程组就是用来模拟并发的数量以及并发的行为。 比如你是要启动10个并发还是100个并发去压测接口就是通过这个组件。并且启动压测程序其实就是通过启动我们的线程组的执行压测。

自带带的线程组如下,其中带gc的使我们添加插件后才有的。不同的线程组的区别就是设置的并发行为不同

  • 比如有些线程组是一股脑配10个并发然后一直执行10分钟。

  • 有些线程组是配置先启动1个并发,每过5秒后再启动10个并发,当到达100个并发后就执行10分钟。

2.4.1、普通线程组

操作: 右键点击测试计划-》 添加-》 线程-》 线程组作用

  • 下图就是我们配置一个线程组, 配置了20个并发,然后在5秒内启动完20个并发,循环次数为10000次就停止压测。注意:最终接口请求数(样本数) = 线程数 x 循环次数

具体该配置的并发行为可以用下图来形象的表示。 可以看到一开始是0个并发,然后随着时间增加不短增加并发,最终在第5秒达到最大并发20,然后就一直20个并发一直执行。

2.4.2、梯度线程组(Stepping Thread Group)

操作: 右键点击测试计划-》 添加-》 线程-》 jp@gc - Stepping Thread Group作用

  • 与普通线程组的并发行为不同的是,这个线程组可以做到类似于先启动5个并发,然后隔10秒后再启动10个并发,当达到100个并发,持续执行30s,然后再每隔5秒降低20个并发这种更为详细的并发行为。 而普通线程组每次只能保持固定的并发数去跑, 我们只能不断修改这个固定的并发数去压测以求找到接口最大的吞吐量。 下图就形象的表示了这种驼峰式的并发行为

具体配置对应的语义和并发行为如下图所示:

  • this goup will start语义: 表示最多启动多大线程。对应图中的峰顶的值
  • first wait for语义:从运行之后多长时间开始启动线程;若设置为60秒, 对应图中开头的底部横线。
  • then start语义:表示第一次要启动几个线程。 对应图中第一个上升线。
  • next add语义 + threads every 语义:表示每隔多少秒启动多少个线程。对应图中的上升梯度线。
  • using ramp-up 语义:其中与普通线程组一样表示启动线程的时间。 对应图中的上升梯度线的斜度,越大越斜表示用的时间越久。
  • then hold load for语义:表示达到最大线程后保持最大线程持续执行多久。 对应图中的峰顶的横线。
  • finally sotp + threads every语义:达到峰顶后,表示每隔多少秒释放多个线程。 对应图中的下降梯度线。

2.5、取样器

如果说线程组就是我们Java的线程池,那么取样器就相当于我们线程池要执行的Runnable任务。比如我们要压测哪个接口就可以配置成取样器。

自带取样器如下

  • 操作: 右键线程组-》 添加-》取样器
  • 一般我们用的比较多就是Http请求取样器,用来压测接口。

2.5.1、Http请求取样器

操作: 右键线程组-》 添加-》取样器-》 Http请求作用: 主要就是用来配置Http接口的信息,包括请求域名,端口,接口路径、接口参数等等。 有了它就可以发起请求。

3、 实战案例

此处压测的接口代码逻辑: 模拟执行时间是500ms

@GetMapping public StringgetA1(){try{Thread.sleep(500);}catch(InterruptedException e){throw new RuntimeException(e);}return"33";}

3.1、 压测接口Hello World

3.1.1、压测配置和执行

1、在测试计划下面添加线程组,设置100个并发,持续执行600秒。

2、添加压测的接口 添加http取样器,并且配置接口信息

3、添加接口执行结果监听器

操作: 右键线程组-》添加-》监听器-》查看结果树。 这样我们接口是否调通以及返回结果都可以看到

4、添加压测接口汇总报告

操作: 右键线程组-》添加-》监听器-》汇总报告。 这样看到这个线程组压测的统计报告,包括吞吐量TPS、响应时间、是否异常,网络请求量,执行次数。

5、添加吞吐量TPS实时统计图(可忽略)

操作: 右键线程组-》添加-》监听器-》jp@gc - Transactions per Second。 这样就可以监测吞吐量的实时变化情况。

5、添加响应时间实时统计图(可忽略)

操作: 右键线程组-》添加-》监听器-》jp@gc - Response Times Over Time 这样就可以监测接口响应时间的实时变化情况。

5、添加激活线程实时统计图(可忽略)

操作: 右键线程组-》添加-》监听器-》jp@gc - Active Threads Over Time 这样就可以监测线程组的并发行为,因为线程组的组件有很多,如果不是非常熟悉可能都不知道自己配置的线程组正在模拟什么样的并发行为。

7、启动线程组执行压测

操作: 右键线程组-》启动

原理: 线程组会去并发执行线程组下面配置的所有取样器(这里只添加了一个还可添加多个)

3.1.2、压测结果分析

最后我们看下各部分压测结果:

1、首先是接口执行情况:

  • 都是绿色表示接口调通,并且右侧可看到接口响应结果。

2、我们看一下压测汇总报告统计:

  • 从下图可以看到样本数就是总共请求的数量, 平均值就是平均响应时间(单位是毫秒)结果跟我们接口代码逻辑还是一致的,最小值和最大值也是接口响应时间。 异常率就是接口调不通(吞不下)的概率。 吞吐量就是每秒能处理168个请求。

3、看一下吞吐量变化情况 随着并发数增加,最终一直维持在180到200的吞吐量之间

3、看下响应时间的变化 基本维持在500ms左右,与我们的代码逻辑耗时基本一致

3.2、 模拟不同的请求参数

1、新建一个CSV文件,里面放我们不同的请求参数,比如内容为

userId,userName1, zhangShan2, liSi3, xaioming

2、新增CSV 数据文件设置组件 将我们刚才新增的csv文件路径配到这里,然后配置变量名,并且设置忽略首行(因为我们的csv文件内容首行不是请求参数)

3、在Http取样器里面直接使用变量即可。 请求参数要使用变量地方就用{}包起来就行。 原理就是请求的时候会去随机读取该文件的的这个字段的值从而达到模拟不同请求参数的效果

3.3、 如何请求要登录验证的接口

这个看你们的登录验证逻辑,假如我们的登录信息是放在cookies里面,那么我们就可以添加HTTP信息头管理器,然后在里面配置cookie请求头信息。只要把我们的登录cookies放进去就可以执行成功。

缺点就是cookie失效后每次要重新配置,具体还有其他更自动化的解决方法

3.4、 接口如何上传文件

接口配置那选择文件上传, 配置配置具体的配置路径即可。会去读取上传。 然后参数名称写死file就行。 然后MIME根据具体来。 一般是application/octet-stream 或者 multipart/form-data即可。 如果要模拟上传不同的文件,同上面模拟不同请求参数一样,这里用变量填充代表文件路径即可。

3.5、 如何在服务端执行Jmeter压测(重要)

之前我们是通过本地Jmeter的GUI界面去进行压测的。但是官方不建议压测通过GUI模式去跑,而是使用CLI命令行的模式去跑压测。 所以我们得先准备测试计划文件.jmx, 然后使用jmeter的命令去跑测试计划。最终会将测试计划的结果报告保存到指定的文件。

具体命令:

jmeter-n-t[xxx.jmx]-l[results file]-e-o[Path to web report folder]
  • -n:非GUI模式,即在非客户端模式下运行JMeter
  • -t:指定待执行的JMeter脚本
  • xxx.jmx是要被执行的JMeter测试计划脚本即在JMeter客户端保存的脚本
  • -l: 指定相关结果到指定的文件中
  • results file就是压测结果保存的文件名,默认存放在命令行当前目录下
  • Path to web report folder 就是报告目录路径

其实细心的可能会发现我们启动jmeter的日志输出默认就是告诉我们应该这样做 具体的官方文档: jmeter.apache.org/usermanual/…

以下是我的执行命令案例:

jmeter -n -t 1.1版本xx测试计划.jmx -l result.txt -e -o report

(base)➜ tmp6 ll -rw-r--r--@1burukeyou staff 16K112314:191.1版本xx测试计划.jmx(base)➜ tmp6 jmeter-n-t1.1版本xx测试计划.jmx-lresult.txt-e-oreport Creating summariser<summary>Created the tree successfully using1.1版本xx测试计划.jmx Starting standalonetest@ November23,20232:21:03 PM CST(1700720463057)Waitingforpossible Shutdown/StopTestNow/HeapDump/ThreadDump message on port4445summary +1in00:00:01=1.6/s Avg:556Min:556Max:556Err:0(0.00%)Active:13Started:13Finished:0summary +299in00:00:06=50.9/s Avg:509Min:504Max:556Err:0(0.00%)Active:0Started:100Finished:100summary=300in00:00:07=46.0/s Avg:510Min:504Max:556Err:0(0.00%)Tidying up... @ November23,20232:21:09 PM CST(1700720469740)... end of run(base)➜ tmp6 ll total216-rw-r--r--@1burukeyou staff 16K112314:191.1版本xx测试计划.jmx -rw-r--r--1burukeyou staff 44K112314:21 jmeter.log drwxr-xr-x6burukeyou staff 192B112314:21 report -rw-r--r--1burukeyou staff 41K112314:21 result.txt

可以发现跑完压测报告后最终在生成了result.txt文件和report目录,进入report目录找到index.html浏览器打开即可看到报告如下

jmeter -n -t [xxx.jmx] -l [results file]执行压测也可不指定Path to web report folder参数。 只生成 results file. 然后通过jmeter -g result.txt -o output命令使用结果文件去生成Html报告。

比如:

(base)➜ tmp6 ll total136-rw-r--r--@1burukeyou staff 16K112314:191.1版本xx测试计划.jmx -rw-r--r--1burukeyou staff5.3K112314:26 jmeter.log -rw-r--r--@1burukeyou staff 41K112314:21 result.txt(base)➜ tmp6 jmeter-gresult.txt-ooutput(base)➜ tmp6 ll total152-rw-r--r--@1burukeyou staff 16K112314:191.1版本xx测试计划.jmx -rw-r--r--1burukeyou staff 14K112314:29 jmeter.log drwxr-xr-x6burukeyou staff 192B112314:29 output -rw-r--r--@1burukeyou staff 41K112314:21 result.txt

如果看压测的每个请求结果响应类似GUI界面那样,可以在jmeter的GUI界面的查看结果树组件的浏览那里导入结果文件即可。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 14:44:28

渗透测试实战指南:从信息收集到漏洞利用的完整攻防解析

1. 项目概述&#xff1a;从“攻”与“防”的视角理解实战渗透“渗透测试实战”这六个字&#xff0c;对于安全从业者而言&#xff0c;意味着从理论到实践的跨越&#xff0c;是从一个观察者转变为参与者的关键一步。它不仅仅是运行几个自动化扫描工具&#xff0c;更是一场精心策划…

作者头像 李华
网站建设 2026/6/26 14:41:41

MusicBee网易云歌词插件终极指南:3步实现完美同步歌词体验

MusicBee网易云歌词插件终极指南&#xff1a;3步实现完美同步歌词体验 【免费下载链接】MusicBee-NeteaseLyrics A plugin to retrieve lyrics from Netease Cloud Music for MusicBee. 项目地址: https://gitcode.com/gh_mirrors/mu/MusicBee-NeteaseLyrics 还在为Musi…

作者头像 李华
网站建设 2026/6/26 14:37:57

Anthropic客户端流式解析层归零:服务端token处理卸载实操指南

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来&#xff0c;我正在调试一个Claude调用链的终端窗口还没关&#xff0c;手就停住了。不是因为震惊&#x…

作者头像 李华
网站建设 2026/6/26 14:33:00

低成本物联网COD监测方案:ShineBlink实战

1. 项目背景与核心价值去年在参与一个农业物联网项目时&#xff0c;客户突然提出需要实时监测鱼塘的化学需氧量&#xff08;COD&#xff09;指标。传统水质监测方案要么价格昂贵&#xff0c;要么需要复杂的开发工作&#xff0c;这让我开始寻找更轻量化的解决方案。经过多次尝试…

作者头像 李华
网站建设 2026/6/26 14:26:03

2026年B端外贸智能拓客工具选型指南:多品牌合规方案参考

一、2026年中国跨境B2B拓客行业的现状与刚需据海关总署2025年末发布的《中国跨境B2B出口发展报告》&#xff0c;2025年国内中小外贸企业线下拓客平均成本较2024年上涨37%&#xff0c;海外专业展会的有效获客线索转化率不足2%&#xff0c;传统开发信的平均打开率仅为8.1%&#x…

作者头像 李华