JMeter基本介绍
Apache JMeter 工具详解
一、JMeter 简介
JMeter 是 Apache 基金会开源的 Java 应用程序,主要用于 性能测试、负载测试 和 功能测试。它通过对服务器或网络资源模拟多种负载条件(如并发用户、持续压力),帮助评估系统性能指标(如响应时间、吞吐量、资源利用率)。
核心用途:
- Web 应用性能测试(HTTP/HTTPS 请求)。
- API 测试(REST、SOAP、Web Services)。
- 数据库性能测试(JDBC 连接)。
- 服务器压力测试(FTP、SMTP、TCP 等)。
- 接口功能验证(支持断言和结果检查)。
主要特点:
- 多协议支持:HTTP、FTP、JDBC、JMS、SOAP 等。
- 图形化界面:方便配置测试计划,无需编码。
- 分布式测试:支持多机器联合施压,模拟高并发。
- 可扩展性:通过插件支持更多协议和报告生成。
- 开源免费:节省企业测试工具采购成本。
二、JMeter 核心组件与架构
1. 基础组件
JMeter 测试计划由多个组件构成,以下是核心元素:
| 组件 | 作用 | 常用实例 |
|---|---|---|
| 测试计划 | 测试的总容器,包含线程组、监听器、配置元件等。 | 用户创建的顶层结构。 |
| 线程组 | 定义虚拟用户(线程)的数量和负载模型(如并发数、启动时间)。 | 设置 100 个线程,5 秒内启动。 |
| Sampler | 发送指定协议请求(如 HTTP Sampler 发送网页请求)。 | HTTP 请求、JDBC 请求、FTP 请求。 |
| 监听器 | 收集和展示测试结果(如响应时间、TPS)。 | 表格结果、图形结果、聚合报告。 |
| 断言 | 验证服务器返回结果是否符合预期(如检查状态码或响应内容)。 | 响应断言、大小断言、持续时间断言。 |
| 配置元件 | 提供测试用的变量或参数(如 CSV 数据集、Header 管理器)。 | HTTP Cookie 管理器、CSV Data Set Config。 |
| 前置/后置处理器 | 在请求前后执行操作(如提取响应数据、生成动态变量)。 | JSON 提取器、正则表达式提取器。 |
2. JMeter 架构
- 逻辑控制器:控制请求的流程(如循环次数、条件判断)。
- 定时器:模拟用户操作的间隔(如固定定时器、高斯随机定时器)。
- 分布式负载架构:控制机(Master)通过 RMI 协议发送指令到多台负载机(Slave),实现多机联合压测。
三、JMeter 工作原理
JMeter 的核心工作原理可概括为以下步骤:
- 创建测试计划:定义要测试的协议(如 HTTP)、请求参数和断言规则。
- 配置线程组:设置并发用户数(线程数)、循环次数、启动延迟。
- 模拟用户行为:每个线程独立执行测试脚本,发送请求并接收响应。
- 收集结果:监听器实时记录请求的响应时间、错误率等指标。
- 生成报告:测试结束后,统计聚合结果并生成图表或日志文件。
&pos_id=img-9lOtCbMo-1742199004409)
四、JMeter 使用步骤(以测试网站性能为例)
步骤 1:安装与启动
- 下载地址:JMeter 官网
- 运行:解压后执行
bin/jmeter.bat(Windows)或bin/jmeter.sh(Linux/Mac)。
步骤 2:创建测试计划
-
添加线程组:
- 右击测试计划 → 添加 → 线程(用户)→ 线程组。
- 配置线程数(用户数)、Ramp-Up 时间(启动时间)、循环次数。
-
添加 HTTP 请求采样器:
- 右击线程组 → 添加 → 取样器 → HTTP 请求。
- 填写目标 URL(如
https://example.com)、协议、路径、参数。
步骤 3:配置结果监听器
- 添加聚合报告:
右击线程组 → 添加 → 监听器 → 聚合报告。
(可选添加其他监听器,如“查看结果树”用于调试)
步骤 4:执行测试
- 点击工具栏的绿色启动按钮(▶️),JMeter 开始发送请求。
步骤 5:分析结果
- 查看 聚合报告 中的关键指标:
- Average:平均响应时间。
- Throughput:吞吐量(请求数/秒)。
- Error %:错误请求比率。
五、结果分析与报告
常见指标解析:
- 响应时间(Response Time):服务器处理请求的时间(单位:毫秒)。
- 吞吐量(Throughput):系统每秒处理的请求数(TPS)。
- 错误率(Error %):失败请求的比例,反映系统稳定性。
示例报告(聚合报告):
| Label | Samples | Average | Min | Max | Error % | Throughput |
|---|---|---|---|---|---|---|
| HTTP Request | 1000 | 150 ms | 100 ms | 500 ms | 0.0% | 200.0/s |
预期结论:在 1000 次请求中,平均响应时间为 150ms,吞吐量达 200 请求/秒,错误率为 0,系统性能良好。
六、常见应用场景
- 电商黑五压测:
- 模拟数万用户并发访问商品页和下单接口,验证系统能否承受流量洪峰。
- API 接口性能监控:
- 通过定时任务批量调用 API,监控每日性能衰减情况。
- 数据库查询优化:
- 使用 JDBC Sampler 验证高并发下 SQL 查询的响应时间。
七、JMeter 优化技巧
- 参数化测试数据:
- 使用 CSV 数据集配置多个用户账号或动态参数。
- 分布式测试:
- 在多台机器上部署 JMeter Agent,通过主控机联合施压。
- 断言与关联:
- 通过正则表达式提取动态 Token,并传递给后续请求。
总结
JMeter 核心价值:通过模拟真实用户行为,量化系统性能瓶颈,为优化提供数据支撑。
适用阶段:推荐在接口开发和核心功能稳定后,用于性能基线测试和维护期的回归验证。
相关文章:
JMeter基本介绍
Apache JMeter 工具详解 一、JMeter 简介 JMeter 是 Apache 基金会开源的 Java 应用程序,主要用于 性能测试、负载测试 和 功能测试。它通过对服务器或网络资源模拟多种负载条件(如并发用户、持续压力),帮助评估系统性能指标&am…...
npm 安装 pnpm 的详细步骤及注意事项
一、安装步骤 1.全局安装 pnpm npm install -g pnpm2.验证安装 pnpm -v输出版本号即表示安装成功。 二、升级 pnpm 若已安装旧版本,可通过以下命令升级: npm install -g pnpmlatest三、配置镜像加速 设置淘宝镜像 pnpm config set registry http…...
蓝桥杯2023年第十四届省赛真题-子矩阵
题目来自DOTCPP: 暴力思路(两个测试点超时): 题目要求我们求出子矩阵的最大值和最小值的乘积,我们可以枚举矩阵中的所有点,以这个点为其子矩阵的左上顶点,然后判断一下能不能构成子矩阵。如果可…...
如何在 Node.js 中使用 .env 文件管理环境变量 ?
Node.js 应用程序通常依赖于环境变量来管理敏感信息或配置设置。.env 文件已经成为一种流行的本地管理这些变量的方法,而无需在代码存储库中公开它们。本文将探讨 .env 文件为什么重要,以及如何在 Node.js 应用程序中有效的使用它。 为什么使用 .env 文…...
Redis BitMap 用户签到
Redis Bitmap Bitmap(位图)是 Redis 提供的一种用于处理二进制位(bit)的特殊数据结构,它基于 String 类型,每个 bit 代表一个布尔值(0 或 1),可以用于存储大规模的二值状…...
未来办公与生活的新范式——智慧园区
在信息化与智能化技术飞速发展的今天,智慧园区作为一种新兴的城市发展形态,正逐步成为推动产业升级、提升城市管理效率、改善居民生活质量的重要力量。智慧园区不仅融合了先进的信息技术,还深刻体现了可持续发展的理念,为园区内的…...
Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!)
Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!) 在实战中,⼤多数情况下都不需要从0开始训练模型,⽽是使⽤“⼤⼚”或者其他研究者开源的已经训练好的⼤模型。 在各种⼤模型开源库中,最…...
【CSS3】化神篇
目录 平面转换平移旋转改变旋转原点多重转换缩放倾斜 渐变线性渐变径向渐变 空间转换平移视距旋转立体呈现缩放 动画使现步骤animation 复合属性animation 属性拆分逐帧动画多组动画 平面转换 作用:为元素添加动态效果,一般与过渡配合使用 概念&#x…...
Unity音频混合器如何暴露参数
音频混合器是Unity推荐管理音效混音的工具,那么如何使用代码对它进行管理呢? 首先我在AudioMixer的Master组中创建了BGM和SFX的分组,你也可以直接用Master没有问题。 这里我以BGM为例,如果要在代码中进行使用就需要将参数暴露出去…...
Vue keepalive学习用法
在Vue中,<keep-alive>的include属性用于指定需要缓存的组件,其实现方式如下: 1. 基本用法 • 字符串形式:通过逗号分隔组件名称,匹配到的组件会被缓存。 <keep-alive include"ComponentA,ComponentB&…...
5-1 使用ECharts将MySQL数据库中的数据可视化
方法一:使用Python Flask框架搭建API 对于技术小白来说,使用ECharts将MySQL数据库中的数据可视化需要分步骤完成。以下是详细的实现流程: 一、技术架构 后端服务:使用Python Flask框架搭建API(简单易学ÿ…...
构建下一代AI Agent:自动化开发与行业落地全解析
1. 下一代AI Agent:概念与核心能力 核心能力描述技术支撑应用价值自主性独立规划与执行任务,无需持续人工干预决策树、强化学习、目标导向规划减少人工干预,提高任务执行效率决策能力评估多种方案并选择最优解决方案贝叶斯决策、多目标优化、…...
如何理解分布式光纤传感器?
关键词:OFDR、分布式光纤传感、光纤传感器 分布式光纤传感器是近年来备受关注的前沿技术,其核心在于将光纤本身作为传感介质和信号传输介质,通过解析光信号在光纤中的散射效应,实现对温度、应变、振动等物理量的连续、无盲区、高…...
四、小白学JAVA-石头剪刀布游戏
1、如何从控制台获取用户输入 import java.util.Scanner;public class Main {public static void main(String[] args) {// 石头剪刀布的思路// 1 2 3 石头 剪刀 布Scanner scanner new Scanner(System.in);System.out.println("请出拳:1.石头 2.剪刀 3.布【…...
【一起来学kubernetes】21、Secret使用详解
Secret 的详细介绍 Secret 是 Kubernetes 中用于存储和管理敏感信息(如密码、令牌、密钥等)的资源对象。Secret的设计目的是为了安全地存储和传输敏感信息,如密码、API密钥、证书等。这些信息通常不应该直接硬编码在配置文件或镜像中&#x…...
css重点知识汇总(一)
css重点知识汇总(一) 引入css的不同方式 link 通过src来获取相应的css资源。除了获取css之外还可以获取其他资源,例如js在页面载入是同步下载可以通过js对dom操作来改变css import css3引入的新方法只能引入css资源需要页面完全载入后才…...
PMP-项目运行环境
你好!我是 Lydia-穎穎 ♥感谢你的陪伴与支持 ~~~ 欢迎一起探索未知的知识和未来,现在lets go go go!!! 1. 影响项目的要素 项目存在在不同的环境下,环境对于项目的交付产生不同的影响。需了解环境对于项目的影响,采取相应措施应对…...
shell 脚本搭建apache
#!/bin/bash # Set Apache version to install ## author: yuan# 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外网通讯良好!" elseecho "网络连接失败&#x…...
Huawei 鲲鹏(ARM/Aarch64)服务器安装KVM虚拟机(非桌面视图)
提出问题 因需要进行ARM架构适配,需要在Huawei Taishan 200k(CPU: Kunpeng 920 5231K)上,创建几台虚拟机做为开发测试环境。 无奈好久没搞了,看了一下自己多年前写的文章:Huawei 鲲鹏…...
《Python实战进阶》No28: 使用 Paramiko 实现远程服务器管理
No28: 使用 Paramiko 实现远程服务器管理 摘要 在现代开发与运维中,远程服务器管理是必不可少的一环。通过 SSH 协议,我们可以安全地连接到远程服务器并执行各种操作。Python 的 Paramiko 模块是一个强大的工具,能够帮助我们实现自动化任务&…...
备赛蓝桥杯之第十六届模拟赛3期职业院校组
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
【Kafka】深入了解Kafka
集群的成员关系 Kafka使用Zookeeper维护集群的成员信息。 每一个broker都有一个唯一的标识,这个标识可以在配置文件中指定,也可以自动生成。当broker在启动时通过创建Zookeeper的临时节点把自己的ID注册到Zookeeper中。broker、控制器和其他一些动态系…...
C++特性——RAII、智能指针
RAII 就像new一个需要delete,fopen之后需要fclose,但这样会有隐形问题(忘记释放)。RAII即用对象把这个过程给包起来,对象构造的时候,new或者fopen,析构的时候delete. 为什么需要智能指针 对于…...
C++异常处理时的异常类型抛出选择
在 C 中选择抛出哪种异常类型,主要取决于错误的性质以及希望传达的语义信息。以下是一些指导原则,帮助在可能发生异常的地方选择合适的异常类型进行抛出: 1. std::exception 适用场景:作为所有标准异常的基类,std::e…...
elsticsearch 通过reindex修改shards
elasticsearch reindex 索引。 背景: 索引test1 reindex到test2 修改sharding数量 程序是通过别名test1_alias访问索引 1、创建目标索引test2 索引需要手动提前创建自动创建可能会有mapping 不一致性的风险。 The destination should be configured as wanted …...
CentOS系类普通挂载磁盘挂载命令
检查磁盘是否有分区 lsblk如果 vdb 下面没有分区(比如 vdb1),你需要先创建分区。 创建分区(如果需要) fdisk /dev/vdb然后在 fdisk 交互界面: 输入 n 创建新分区 选择 p 创建主分区 默认分区号和大小 输…...
Kafka自定义分区机制
文章目录 1.如何自定义分区机制2.示例 1.如何自定义分区机制 若需要使用自定义分区机制,需要完成两件事: 1)在 producer 程序中创建一个类,实现 org.apache.kafka.clients.producer.Partitioner 接口主要分区逻辑在 Partitioner.partition中…...
【HarmonyOS NEXT】关键资产存储开发案例
在 iOS 开发中 Keychain 是一个非常安全的存储系统,用于保存敏感信息,如密码、证书、密钥等。与文件系统不同,Keychain 提供了更高的安全性,因为它对数据进行了加密,并且只有经过授权的应用程序才能访问存储的数据。那…...
强化学习(赵世钰版)-学习笔记(9.策略梯度法)
本章是课程的导数第二章,旨在讲解策略的函数化形式。 之前的方法,描述一个策略都是用表格的形式,每一行代表一个状态,每一列代表一个行为,表格中的元素对应相关状态下执行相关行为的概率。 函数化的策略表征形式是指&a…...
ModuleNotFoundError: No module named ‘flask‘ 错误
要解决 ModuleNotFoundError: No module named ‘flask’ 错误,需确保已正确安装 Flask 库。以下是详细步骤: 1. 安装 Flask 在终端或命令行中执行以下命令(注意权限问题): 使用 pip 安装 pip install flask 若…...
