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

JMeter的基本使用教程

jmeter的基本使用教程

  • 1. JMeter介绍
    • 1.1 JMeter 能做什么?
    • 1.2 JMeter 架构与组件
    • 1.3 运行方式
    • 1.4 📊 五、结果查看方式
    • 1.5 常见应用场景
  • 2. 下载地址
  • 3. 使用
    • 3.1 设置为简体中文
    • 3.2 并发测试
      • 3.2.1 新建线程组、设置并发数量
  • 4. 执行脚本来跑压测
  • 5. 结果
    • 5.2 result.jtl
  • 6.性能测试指标
  • 附录

1. JMeter介绍

JMeter(Apache JMeter)是 Apache 软件基金会开发的一款开源的 性能测试工具,主要用于对 Web 应用、接口、数据库、FTP、邮件服务等各种服务进行负载测试、性能测试、压力测试和功能验证。

属性内容
名称Apache JMeter
类型开源性能测试工具
编程语言Java
官网https://jmeter.apache.org
支持平台跨平台(Windows、Linux、macOS)

1.1 JMeter 能做什么?

✅ 性能与负载测试

  • Web 应用(HTTP、HTTPS)
  • REST API、SOAP
  • JDBC 数据库服务
  • FTP 服务
  • JMS(消息中间件)
  • 邮件(SMTP、POP3、IMAP)

✅ 功能测试(有限)
尽管它主要用于性能测试,但也可用于简单的功能验证。

1.2 JMeter 架构与组件

🧩 核心组件

  • Test Plan(测试计划):测试的最顶层结构,包含所有配置。
  • Thread Group(线程组):模拟用户行为,定义并发数、循环次数。
  • Sampler(采样器):用于发起请求,例如 HTTP 请求、JDBC 请求等。
  • Listener(监听器):用于查看结果,如表格、树形图、图形、汇总报告等。
  • Assertion(断言):验证响应是否符合预期(如响应码为200、包含特定文本)。
  • Timer(定时器):用于控制请求之间的间隔。
  • Config Element(配置元件):如HTTP请求默认值、CSV数据文件设置等。
  • Pre/Post Processor(前/后置处理器):处理请求前后的数据。

1.3 运行方式

  1. 图形界面运行(GUI)
  2. 命令行模式 jmeter -n -t test.jmx -l result.jtl -e -o report/
jmeter -n -t "D:\HTTP请求.jmx" -l "D:\result.jtl" -e -o "D:\report"

含义说明:

  • -n:非GUI模式运行
  • -t:指定测试脚本
  • -l:结果日志文件(原始数据)
  • -e -o:生成HTML格式的报告

1.4 📊 五、结果查看方式

图形化界面中的 Listener

  • 聚合报告(Aggregate Report)

  • 结果树(View Results Tree)

  • 响应时间图

命令行生成 HTML 报告

  • 执行后在 -o 指定的目录中查看 index.html

1.5 常见应用场景

场景示例
接口压测测试 RESTful API 的响应时间与 TPS
登录系统性能测试多用户同时登录行为模拟
数据库负载测试执行大量 SQL 查询
文件上传下载性能FTP 上传下载操作压力测试
多节点并发测试分布式模拟大量用户访问

2. 下载地址

这里我是用的的是windows电脑

https://jmeter.apache.org/download_jmeter.cgi
在这里插入图片描述

解压后,使用(注意这里需要JAVA8及以上版本的JDK)
在这里插入图片描述

注意配置环境变量(系统变量)
在这里插入图片描述

在这里插入图片描述

3. 使用

3.1 设置为简体中文

在这里插入图片描述

3.2 并发测试

3.2.1 新建线程组、设置并发数量

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在查看结果树中查看结果,当然不建议在GUI中压测

在这里插入图片描述

4. 执行脚本来跑压测

在这里插入图片描述
在这里插入图片描述

jmeter -n -t "D:\HTTP请求.jmx" -l "D:\result.jtl" -e -o "D:\report"
参数说明
-n使用非 GUI 模式
-t指定测试计划文件(.jmx)
-l保存测试结果的 .jtl 文件路径
-e生成 HTML 报告
-oHTML 报告输出目录(必须是空目录或不存在)
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

翻译

WARN StatusConsoleListener 使用包扫描(package scanning)来定位插件的方式已被弃用,并将在未来的版本中移除。
WARN StatusConsoleListener 使用包扫描来定位插件的方式已被弃用,并将在未来的版本中移除。
WARN StatusConsoleListener 使用包扫描来定位插件的方式已被弃用,并将在未来的版本中移除。
WARN StatusConsoleListener 使用包扫描来定位插件的方式已被弃用,并将在未来的版本中移除。
================================================================================
不要在图形界面(GUI)模式下进行压测!GUI 模式仅用于测试创建和调试。进行负载测试时,请使用 CLI 模式(非 GUI):jmeter -n -t [jmx 文件] -l [结果文件] -e -o [Web 报告目录路径]并根据测试需求增加 Java 堆内存大小:修改 jmeter 启动脚本中的环境变量 HEAP,例如:HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"参考文档:https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

5. 结果

在这里插入图片描述

解释Statistics
📊 Statistics 区块字段说明

字段含义
Label该行统计的请求名称(这里是“HTTP请求”)
#Samples请求总次数(此处为 100 次)
FAIL失败请求数(此处为 0,说明全部成功)
Error %失败率(此处为 0.00%)
Average平均响应时间(单位:毫秒,3.65ms)
Min最短响应时间(1ms)
Max最长响应时间(24ms)

⏱ Response Times(响应时间分布)
这些百分位是帮助你理解 大多数请求的响应时延分布:

字段含义
Median(中位数)50%的请求响应时间 ≤ 2ms
90% pct(90百分位)90%的请求响应时间 ≤ 3ms
95% pct95%的请求响应时间 ≤ 24ms
99% pct99%的请求响应时间 ≤ 24ms

✅ 这些数据表明大部分请求非常快(<5ms),只有少量请求耗时稍长。


🚀 Throughput(吞吐量)

字段含义
Transactions/s平均每秒处理的请求数(108.34 次/秒)
这个值越大,说明系统单位时间内处理能力越强。

📶 Network(网络吞吐量)

字段含义
Received每秒接收数据量(29.20 KB/s)
Sent每秒发送数据量(13.65 KB/s)

✅ 总结
从这份报告可以看出:

所有请求都成功(100% PASS,0% Error)。

响应时间非常短(平均 3.65ms,中位数 2ms)。

吞吐率高(108 req/s)。

没有明显性能瓶颈,适合生产环境初步压力测试验证。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2 result.jtl

在这里插入图片描述
在这里插入图片描述

6.性能测试指标

【虚拟用户数】:线程=用户

【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某个功能进行交互。一般通过集合点实现。

【事务】:一个接口可以是事务,多个接口也可以是事务,一个流程可以是事务,事务代表一个完整的功能。由测试人员决定的。

【场景】:性能测试的用例

【响应时间】:Response Time
平均响应时间: 所有请求响应时间的总和除以请求总数。容易受到极端值影响(如某些请求特别慢),不一定能真实反映大多数用户的体验。
中位数: 表示50%的请求的响应时间小于等于该值。比平均值更能反映典型用户的体验,因为它不受极端值影响。
90% 响应时间:表示90% 的请求响应时间都比这个值快,只有 10% 的请求慢于它。
95% 响应时间:表示95% 的请求响应时间都比这个值快,只有 5% 的请求慢于它。
99% 响应时间:表示99% 的请求响应时间都比这个值快,只有 1% 的请求慢于它。

✅ 举个例子:

项目数值(ms)
平均响应时间300
中位数响应时间250
90% 响应时间500
95% 响应时间800
99% 响应时间1500

解释:

  • 大多数用户的请求都能在 250ms 内响应(中位数)。
  • 90%的用户在 500ms 内收到响应,说明有 10% 的请求比这更慢。
  • 少数请求可能非常慢,比如有 1% 的请求达到 1500ms,可能是系统瓶颈或抖动引起的。

【TPS】TPS是系统的重要性能指标,用于衡量系统在一定时间内能够处理的事务数。
计算公式:总的事务数/总的运行时间
“事务”可以是一次数据库提交、一次支付请求、一次下单操作等;

举个例子:
压测期间你执行了 10,000 次下单操作
测试持续了 200 秒
TPS = 10000 ÷ 200 = 50(每秒50个事务)

【QPS】每秒查询率
【吞吐量】衡量网络成功传输的数据量
【资源利用率】CPU、磁盘、网络


指标全称说明
QPSQueries Per Second每秒处理的请求数
TPSTransactions Per Second每秒完成的事务数(更关注业务完整性,如数据库或金融系统)
RTResponse Time响应时间处理一个请求所需的时间(单位:ms)
并发数Concurrent Users同一时刻系统正在处理的请求数
指标QPSTPS
含义每秒请求数每秒事务数
关注点请求是否被接收请求是否被处理并完成
应用场景接口访问量、搜索、API 流量等数据库、支付、下单等业务流程
示例查询一次商品信息完成一次支付交易

👉 通俗理解:

  • QPS 是 “你打进了多少电话”;
  • TPS 是 “你最终完成了多少通话”。

附录

  1. 参考文档: https://blog.csdn.net/m0_62665400/article/details/139478525
  2. 视频 https://www.bilibili.com/video/BV1LyhHzDEpG?spm_id_from=333.788.videopod.episodes&vd_source=240d9002f7c7e3da63cd9a975639409a&p=2
http://www.lryc.cn/news/609975.html

相关文章:

  • OpenLayers 详细开发指南 - 第八部分 - GeoJSON 转换与处理工具
  • 《Java Agent与Instrumentation:运行时增强的魔法武器》
  • 为什么ping和dig(nslookup)返回地址不一样,两者的区别
  • 基于C语言实现(控制台 )小区物业管理系统
  • Java常用数据结构入门
  • 推荐广告搜索三种业务的区别
  • 车载通信架构 ---车内通信的汽车网络安全
  • 人工智能之数学基础:条件概率及其应用
  • 跟着顶刊学写论文-摘要1
  • 深入浅出 RabbitMQ:工作队列实战(轮训策略VS公平策略)
  • SpringCloud之Nacos基础认识-服务注册中心
  • 13.Home-面板组件封装
  • Mac桌面仿制项目--让ai一句话生成的
  • mac 技巧
  • 【AI 加持下的 Python 编程实战 2_13】第九章:繁琐任务的自动化(中)——自动批量合并 PDF 文档
  • 大模型×垂直领域:预算、时间、空间三重夹击下的生存法则
  • 2.2 vue2子组件注册使用
  • 西门子PLC S7-1200单轴步进控制电动机
  • Axure设计Web端新增表单页面模板案例
  • 【LeetCode 热题 100】215. 数组中的第K个最大元素——(解法一)快速选择
  • 安卓逆向(基础①-Google Pixel-Root)
  • Visual Studio 2022安装与快捷键全攻略
  • 模型蒸馏(Distillation):原理、算法、应用
  • 【达梦MPP(带主备)集群搭建】
  • Selenium教程(Python 网页自动化测试脚本)
  • 华为2288H V5服务器闪红灯 无法开机案例
  • C++八股文——设计模式
  • JSON Schema
  • mybatis-plus报错Caused by: java.sql.SQLException: 无效的列类型: 1111
  • 使用 Aspose.OCR 将图像文本转换为可编辑文本