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

面向初学者的JMeter实战手册:从环境搭建到组件解析

🌟 ​大家好,我是摘星!​ 🌟

今天为大家带来的是面向初学者的JMeter实战手册:从环境搭建到组件解析,废话不多说,让我们直接开始~

目录

1. JMeter简介

2. JMeter安装与配置

2.1. 安装

2.2. 配置环境变量(可选)

3. JMeter核心概念

3.1. 测试计划

3.2. 线程组

3.3. 取样器

3.4. 监听器

3.5. 配置元件

3.6. 断言

3.7. 前置处理器/后置处理器

4. JMeter 常用功能

4.1. 语言设置

4.2. 主题设置

4.3. 基本流程

4.3.1. 创建线程组

4.3.2. 添加取样器

4.4. 添加监听器


1. JMeter简介

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

2. JMeter安装与配置

2.1. 安装

  • 安装:Apache Jmeter官网下载地址:Apache JMeter - Download Apache JMeter,选择.zip.tgz包(推荐最新稳定版)

  • 解压:将压缩包解压到任意目录(路径中不要包含中文或空格),windows下,zip包解压缩即可使用,目录结构如下:

  • 运行:其中的bin目录就是执行的脚本,其中包含启动脚本:

双击即可运行,但是有两点注意:

  • 启动速度比较慢,要耐心等待
  • 启动后黑窗口不能关闭,否则Jmeter也跟着关闭了

2.2. 配置环境变量(可选)

  • JMETER_HOME 设置为 JMeter 解压路径。

  • %JMETER_HOME%\bin 添加到系统 PATH 环境变量中。

3. JMeter核心概念

3.1. 测试计划

  • 测试的顶层容器,所有测试元件(如线程组、监听器等)都需在测试计划下创建。

3.2. 线程组

  • 定义虚拟用户(线程)的数量、启动时间、循环次数等参数。
  • 右键测试计划 → 添加 → 线程(用户)→ 线程组。

3.3. 取样器

  • 用于发送请求(如 HTTP 请求、JDBC 请求等)。
  • 常用 Sampler:HTTP 请求JDBC RequestFTP 请求

3.4. 监听器

  • 用于收集和展示测试结果(如表格、图形、日志等)。
  • 常用监听器:查看结果树聚合报告图形结果

3.5. 配置元件

  • 配置测试参数(如 HTTP 请求头、CSV 数据文件等)。
  • 常用配置元件:HTTP 请求默认值CSV 数据集配置

3.6. 断言

  • 验证服务器响应是否符合预期(如检查状态码、响应内容等)。
  • 常用断言:响应断言JSON 断言

3.7. 前置处理器/后置处理器

  • 在发送请求前或处理响应后执行操作(如提取动态参数)。
  • 常用后置处理器:正则表达式提取器JSON 提取器

4. JMeter 常用功能

4.1. 语言设置

  • JMeter默认语言是英文,可以在Opting选项中设置成简体中文

  • 以上配置只针对当前运行程序,若要永久改动,则需要修改配置文件,路径在安装路径下的bin目录中的jmeter.properties文件,添加language=zh_CN到文件中即可

4.2. 主题设置

在选项中选择自己喜欢的主题即可,这里选择的是idea同款主题

4.3. 基本流程

4.3.1. 创建线程组

在测试计划上点鼠标右键,选择添加>线程(用户)>线程组,填写线程信息,以下是线程属性解读:

  • 线程数:模拟的并发用户数量,即同时发送请求的虚拟用户数,用于控制测试的并发压力,线程数越多,对服务器的负载压力越大。

例如:设置为 100 表示 JMeter 会模拟 100 个用户同时操作。

  • Ramp-Up时间:所有线程从启动到全部运行完成的时间间隔(单位:秒),模拟用户逐步增加的真实场景避免瞬间高并发导致服务器崩溃,观察系统在负载逐步上升时的性能表现。

例如:线程数=100,Ramp-Up=50,表示 JMeter 会在 50 秒内均匀启动 100 个线程(每秒约启动 2 个)。

  • 循环次数:每个线程重复执行测试计划的次数,延长测试时间,模拟用户持续操作,通过多次循环获取更稳定的性能数据(如平均响应时间)。

例如:设置为 5 表示每个线程会执行 5 次完整的测试计划。

勾选 永远:线程会无限循环执行,直到手动停止或达到测试时长限制(需配合调度器使用)。

4.3.2. 添加取样器

在已创建的HTTP请求上点鼠标右键,添加http取样器,并编写取样器内容,以下是属性解读:

基本配置项

说明

名称

取样器的描述性名称(如 "登录接口"),便于后续结果分析。

注释

可选,添加备注信息。

协议

请求的协议类型,默认为 httphttps(需完整填写,如 https://)。

服务器名称或 IP

目标服务器的域名或 IP 地址(如 api.example.com),⚠️ 如果测试计划中已配置 HTTP 请求默认值,此处可留空。

端口号

服务器的端口号(HTTP 默认为 80,HTTPS 默认为 443)。

HTTP 请求方法

选择请求方法:GETPOSTPUTDELETE 等。

路径

请求的 URL 路径(如 /api/login),⚠️ 不要包含协议和域名(已在前面配置)。

内容编码

请求体的编码格式(如 UTF-8),通常保持默认。

自动重定向

若勾选,JMeter 会自动跟随 3xx 重定向(不记录重定向过程)。

跟随重定向

若勾选,JMeter 会记录重定向的每个步骤(在结果树中显示多次请求)。

使用 KeepAlive

保持 HTTP 长连接,默认勾选(性能测试建议启)。

对POST使用multipart/form-data

勾选后启用文件上传或表单提交(适用于POST请求)

与浏览器兼容的头

兼容浏览器的头信息

4.4. 添加监听器

在已创建的HTTP请求上点鼠标右键,添加监听器:

监听器名称

主要功能

适用场景

查看结果树

显示每个请求的详细请求/响应数据(Header、Body、状态码等)。

调试阶段,检查请求是否正确。

聚合报告

统计所有请求的响应时间、吞吐量、错误率等关键指标(平均值、中位数、90% Line等)。

性能测试分析,评估整体性能。

图形结果

以折线图形式展示响应时间、吞吐量随时间的变化趋势。

直观观察性能波动。

汇总报告

类似聚合报告,但更简洁,仅显示关键统计值(平均、最小、最大、错误率)。

快速查看测试概况。

响应时间图

绘制每个请求的响应时间变化曲线。

分析响应时间稳定性。

断言结果

显示断言(如状态码、内容匹配)是否通过。

验证接口功能是否符合预期。

后端监听器

将测试结果发送到外部系统(如InfluxDB + Grafana)。

实时监控 & 可视化大屏展示。

监听器核心指标解析

指标

含义

理想情况

样本数

总共发送的请求数量。

与预期并发量一致。

平均响应时间

所有请求的平均响应时间(毫秒)。

越低越好(取决于业务需求)。

中位数

50%的请求响应时间低于此值。

比平均值更稳定,不受极端值影响。

90% Line

90%的请求响应时间低于此值(反映绝大多数用户的体验)。

越接近平均值越好。

吞吐量

每秒处理的请求数(Requests/sec)。

越高越好(系统处理能力)。

错误率

失败请求的百分比。

**0%**(无错误)。

以下是部分监听器显示效果:

相关文章:

面向初学者的JMeter实战手册:从环境搭建到组件解析

🌟 ​大家好,我是摘星!​ 🌟 今天为大家带来的是面向初学者的JMeter实战手册:从环境搭建到组件解析,废话不多说,让我们直接开始~ 目录 1. JMeter简介 2. JMeter安装与配置 2.1. 安装 2.2.…...

工资管理系统的主要功能有哪些

工资管理系统通过自动化薪资计算、税务处理、员工数据管理、报表生成等功能,极大地提升了薪资发放的效率和准确性。在传统的人工薪资管理中,HR人员需要手动计算每位员工的薪资,并确保符合税务要求,极易出错且耗时。而现代工资管理…...

避坑,app 播放器media:MediaElement paly报错

System.Runtime.InteropServices.COMException HResult=0x8001010E Message= Source=WinRT.Runtime StackTrace: 在 WinRT.ExceptionHelpers.<ThrowExceptionForHR>g__Throw|38_0(Int32 hr) 在 ABI.Microsoft.UI.Xaml.Controls.IMediaPlayerElementMethods.get_MediaPlay…...

子函数嵌套的意义——以“颜色排序”为例(Python)

多一层缩进精减参数传递&#xff0c;参数少平铺书代码写更佳。 笔记模板由python脚本于2025-04-16 11:52:53创建&#xff0c;本篇笔记适合喜欢子函数嵌套结构代码形式的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅…...

Redis 的不同数据结构分别适用于哪些微服务场景

我们一块来分析下Redis 的不同数据结构在微服务场景下的具体应用&#xff1a; 1. String (字符串) 特点: 最基本的数据类型&#xff0c;二进制安全&#xff0c;可以存储任何类型的数据&#xff08;文本、序列化对象、图片等&#xff09;&#xff0c;最大 512MB。支持原子性的…...

信息系统项目管理工程师备考计算类真题讲解四

一、三点估算&#xff08;PERT&#xff09; PERT&#xff08;Program Evaluation and Review Technique&#xff09;&#xff1a;计划评估技术&#xff0c;又称三点估算技术。PERT估算是一种项目管理中用于估算项目工期或成本的方法&#xff0c;以下是其详细介绍&#xff1a; …...

Golang|KVBitcask

文章目录 初识KVbitcask论文详解 初识KV bitcask论文详解 论文地址&#xff1a;https://riak.com/assets/bitcask-intro.pdf理想的存储引擎&#xff0c;应该满足下面一些特点&#xff1a;...

Python学习之路(三)

将 Python 与数据库对接是开发过程中常见的任务&#xff0c;可以使用多种数据库&#xff08;如 SQLite、MySQL、PostgreSQL、Oracle、MongoDB 等&#xff09;。以下是一些常见的数据库及其与 Python 的对接方法&#xff0c;包括安装库、连接数据库、执行查询和操作数据的示例。…...

基于骨骼识别的危险动作报警系统设计与实现

基于骨骼识别的危险动作报警系统设计与实现 基于骨骼识别的危险动作报警分析系统 【包含内容】 【一】项目提供完整源代码及详细注释 【二】系统设计思路与实现说明 【三】基于骨骼识别算法的实时危险行为预警方案 【技术栈】 ①&#xff1a;系统环境&#xff1a;Windows 10…...

PDF转换格式失败?原因及解决方法全解析

在日常工作中&#xff0c;我们经常会遇到将PDF转换为Word、Excel、PPT等格式的需求。有时候以为一键转换就能搞掂&#xff0c;没想到却转换失败。到底问题出在哪&#xff1f;别急&#xff0c;我们可以看看是否以下几个问题引起的&#xff0c;找到解决问题的关键&#xff01; 原…...

模型提示词

一 提示词 &#xff08;一&#xff09; 提示词&#xff08;Prompt&#xff09;是用户发送给大语言模型的问题、指令或请求&#xff0c;** 1 来明确地告诉模型用户想要解决的问题或完成的任务&#xff0c;是大语言模型理解用户需求并据此生成相关、准确回答或内容的基础。对于…...

void MainWindow::on_btnOutput_clicked()为什么我在QT里面没有connect,也能触发点击效果

在 Qt 中&#xff0c;即使你没有显式调用 connect 函数&#xff0c;某些信号&#xff08;如按钮的 clicked() 信号&#xff09;仍然可以触发槽函数。这是因为 Qt 提供了一种自动连接机制&#xff0c;称为 自动连接&#xff08;Auto-Connection&#xff09;。以下是可能的原因和…...

Node.js 数据库 事务 项目示例

1、参考&#xff1a;JavaScript语言的事务管理_js 函数 事务性-CSDN博客 或者百度搜索&#xff1a;Nodejs控制事务&#xff0c; 2、实践 2.1、对于MySQL或MariaDB&#xff0c;你可以使用mysql或mysql2库&#xff0c;并结合Promise或async/await语法来控制事务。 使用 mysql2…...

Qt开发:QFileInfo详解

文章目录 一、QFileInfo 简介二、常用的构造函数三、常用函数的介绍和使用四、常用静态函数的介绍和使用五、完整代码示例 一、QFileInfo 简介 QFileInfo 提供了一个对象化的方式&#xff0c;用于访问文件系统中单个文件的信息。它可以接受&#xff1a; 文件名字符串&#xff…...

ubuntu1804服务器开启ftp,局域网共享特定文件给匿名用户

要在 Ubuntu 18.04 上设置一个 FTP 服务器&#xff0c;满足以下要求&#xff1a; 允许匿名登录&#xff08;无需账号密码&#xff09;。指定分享特定目录下的文件。只允许只读下载。 可以使用 vsftpd&#xff08;Very Secure FTP Daemon&#xff09;来实现。以下是详细步骤&a…...

蓝桥杯常考排序

1.逆序 Collections.reverseOrder() 方法对列表进行逆序排序。通过 Collections.sort() 方法配合 Collections.reverseOrder()&#xff0c;可以轻松实现从大到小的排序。 import java.util.ArrayList; // 导入 ArrayList 类&#xff0c;用于创建动态数组 import java.util.C…...

深度学习基础:从入门到理解核心概念

引言 近年来&#xff0c;深度学习(Deep Learning)已成为人工智能领域最热门的研究方向之一。从AlphaGo战胜人类围棋冠军&#xff0c;到ChatGPT等大型语言模型的惊艳表现&#xff0c;深度学习技术正在深刻改变我们的生活和工作方式。本文将系统介绍深度学习的基础知识&#xff0…...

科技项目验收测试报告有哪些作用?需要多长时间和费用?

在当今快速发展的科技环境中&#xff0c;科技项目的有效验收至关重要。对于公司、开发团队以及客户来说&#xff0c;科技项目验收测试报告更是一个不可缺少的一项重要环节。 科技项目验收测试报告是对一个项目在开发完成后所进行的一系列测试结果的总结。这份报告不仅用于证明…...

redis-事务(MULTI、EXEC、DISCARD、WATCH与lua脚本、包含lua脚本的简单介绍、乐观锁抢购案例的实现)

https://juejin.cn/post/6891158857708797959 首先Redis事务在实际的场景应用上也占着比较重要的地位&#xff0c;例如在秒杀场景中&#xff0c;我们就可以利用Redis事务中的watch命令监听key&#xff0c;实现乐观锁&#xff0c;保证不会出现冲突&#xff0c;也防止商品超卖。 …...

【Linux】su、su-、sudo、sudo -i、sudo su - 命令有什么区别?分别适用什么场景?

目录 su su- sudo sudo -i sudo su - /etc/sudoers su 该命令将启动非登录shell&#xff0c;即虽然以该用户身份启动shell&#xff0c;但使用的是原始用户的环境设置。普通用户账户运行 su 命令切换到另一用户账户&#xff0c;需提供要切换的账户的密码。root用户&…...

CCLinkIE转ModbusTCP借网关之力打破组态王与三菱PLC通讯隔阂​

在某自动化生产线项目中&#xff0c;客户采用了三菱PLC作为现场控制核心&#xff0c;该PLC支持CCLinkIE现场总线协议。同时&#xff0c;客户希望使用组态王上位机软件进行生产过程的监控与管理&#xff0c;然而组态王上位机更擅长与ModbusTCP协议设备进行通讯。为了解决这一协议…...

MyBatis-Plus 通过 ID 更新数据为NULL总结

在使用 MyBatis-Plus 通过 ID 更新数据时&#xff0c;若需将字段值设为 null&#xff0c;可参考以下解决方案&#xff1a; 方法一&#xff1a;使用 TableField 注解 在实体类字段上添加注解&#xff0c;指定更新策略为忽略非空检查&#xff1a; public class User {TableFie…...

Linux网络编程第一课:深入浅出TCP/IP协议簇与网络寻址系统

知识点1【网络发展简史】 **网络节点&#xff1a;**路由器和交换机组成 交换机的作用&#xff1a;拓展网络接口 路由&#xff1a;网络通信路径 1、分组交换 分组的目的&#xff1a; 数据量大&#xff0c;不能一次型传输&#xff0c;只能分批次传输&#xff0c;这里的每一批…...

深入解析布尔注入:原理、实战与防御

目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例&#xff1a;获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入&#xff08;Boolean-Based Blind SQL Injection&#xff09;是一种…...

GESP2023年12月认证C++七级( 第三部分编程题(2)纸牌游戏)

参考程序&#xff1a; #include <iostream> #include <cstring> // for memset #include <vector> using namespace std;const int max_n 1005; int n; int a[max_n], b[max_n], c[max_n]; // a[]: 得分系数&#xff1b;b[]: 换牌惩罚&#xff1b;c[]: …...

不同的人机验证的机制

目录 Cloudflare Turnstile验证 reCAPTCHA V2 GeeTest CAPTCHA Arkose Labs 验证码&#xff08;FunCaptcha&#xff09; 图像&#xff08;图片&#xff09;验证码 亚马逊验证码 (AWS/WAF) Cloudflare Turnstile验证 Cloudflare Turnstile 验证码以隐形方式运行&#xf…...

HarmonyOS学习 实验九:@State和@Prop装饰器的使用方法

HarmonyOS应用开发&#xff1a;父子组件状态管理实验报告 引言 在HarmonyOS应用开发领域&#xff0c;组件之间的状态管理是一个至关重要的概念。通过有效的状态管理&#xff0c;我们可以确保应用的数据流动清晰、可预测&#xff0c;从而提升应用的稳定性和可维护性。本次实验…...

基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0——Linux应用开发手册

前 言 本文主要介绍TL3562-MiniEVM评估板的AMP(Asymmetric Multi-processing)开发案例,适用开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:VMware16.2.5、Ubuntu20.04.6 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-5.10.209 Lin…...

Java c线程等待ab线程执行完再执行

1、LockSupport AtomicInteger LockSupport.park() 函数表示挂起当前线程LockSupport.unpark© 函数表示解除线程c的阻塞状态AtomicInteger.decrementAndGet() 函数表示将该变量减一&#xff0c;并返回当前变量值&#xff08;线程安全的原子类&#xff09; 2、CountDownL…...

ubuntu20.04 Android14编译环境配置

ubuntu 更新和必要安装 sudo apt update sudo apt install git sudo apt install python2-minimal sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2 sudo upda…...