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

JMeter介绍以及使用详解

文章目录

前言

一、JMeter 安装与环境准备

1. 前置条件

2. 安装 JMeter

3. 界面语言设置(可选)

二、JMeter 核心组件与界面介绍

核心组件(必知)

三、JMeter 基本使用流程(以 HTTP 接口测试为例)

场景:测试一个 “用户登录” 接口(POST /api/login),验证高并发下的性能。

步骤 1:创建测试计划

步骤 2:添加线程组(模拟并发用户)

步骤 3:添加配置元件(统一设置接口基础信息)

步骤 4:添加取样器(定义接口请求)

步骤 5:添加断言(验证响应正确性)

步骤 6:添加监听器(收集测试结果)

步骤 7:运行测试并分析结果

四、高级功能:参数化与动态数据

场景:用 100 个不同账号登录,账号密码存储在 CSV 文件中。

步骤 1:准备 CSV 数据文件

步骤 2:添加 CSV 数据文件设置

步骤 3:修改 HTTP 请求参数

五、分布式测试(模拟超高并发)

原理

配置步骤

六、命令行模式运行(推荐)

七、常用技巧与注意事项

总结


前言

      Apache JMeter 是由 Apache 软件基金会开发的一款开源、跨平台的性能测试工具,主要用于模拟高并发用户场景,对各类系统(如 Web 应用、API 接口、数据库、消息队列等)进行负载测试、压力测试和性能评估,

        它的核心目标是通过量化指标(如响应时间、吞吐量、错误率、资源使用率等)揭示系统在不同负载下的性能瓶颈与稳定性。它支持 HTTP/HTTPS、FTP、JDBC、WebSocket、SOAP 等多种协议,通过 “测试计划 - 线程组 - 取样器 - 监听器” 的组件化架构构建测试场景:线程组模拟并发用户量与请求频率,取样器定义具体请求(如 HTTP 接口调用、数据库查询),监听器(如汇总报告、图形结果)收集并可视化测试数据,同时可配合断言验证响应正确性、通过 CSV 参数化实现动态数据输入(如多用户账号登录)。

        此外,JMeter 提供分布式测试能力以模拟超高并发,支持命令行模式减少资源消耗,还可通过插件扩展功能,其开源免费、界面友好、配置灵活的特点,使其成为开发与测试人员验证系统性能极限、优化架构设计的重要工具。今天我们就来了解它的使用以及作用。


一、JMeter 安装与环境准备

1. 前置条件

JMeter 基于 Java 开发,需先安装 JDK 8+ 并配置环境变量(JAVA_HOME)。

  • 验证 Java 环境:命令行输入 java -version,若显示版本信息则配置成功。
2. 安装 JMeter
  • 下载:从 JMeter 官网 下载最新版本(如 apache-jmeter-5.6.zip)。
  • 安装
    • Windows:解压 zip 包到任意目录(如 D:\apache-jmeter-5.6);
    • Linux/Mac:解压后通过 chmod +x bin/jmeter 赋予执行权限。
  • 启动
    • Windows:双击 bin/jmeter.bat
    • Linux/Mac:终端执行 bin/jmeter
3. 界面语言设置

它的默认界面为英文,可改为中文:

  1. 菜单栏选择 Options → Choose Language → Chinese (Simplified)
  2. 重启 JMeter 生效。

二、JMeter 核心组件与界面介绍

JMeter 测试场景通过 “组件嵌套” 构建,核心界面可以分为 4 部分:

  • 菜单栏:操作命令入口(如保存、运行、配置);
  • 工具栏:常用功能快捷按钮(如添加组件、启动测试);
  • 左侧导航树:测试计划的组件结构(核心);
  • 右侧详情面板:配置选中组件的具体参数。
核心组件:
组件作用
测试计划整个测试的根节点,所有组件都必须包含在测试计划下。
线程组模拟用户并发:“线程数”= 虚拟用户数,“ Ramp-Up 时间”= 用户启动耗时(秒),“循环次数”= 每个用户的请求次数。
取样器发送请求的组件(如 HTTP 请求、JDBC 请求),是测试的 “执行单元”。
监听器收集并展示测试结果(如响应时间、吞吐量),常用:汇总报告、查看结果树、图形结果。
配置元件为取样器提供额外配置(如 HTTP 请求默认值、CSV 数据文件设置)。
断言验证响应结果是否符合预期(如检查响应包含 “success” 字段)。
定时器控制请求发送间隔(如固定定时器设置每个请求间隔 1 秒)。

三、JMeter 基本使用流程(我们以 HTTP 接口测试为例)

场景:测试一个 “用户登录” 接口(POST /api/login),验证高并发下的性能。
步骤 1:创建测试计划
  1. 启动 JMeter 后,默认生成一个 “测试计划”;
  2. 右键 “测试计划”→“重命名”,改为 “用户登录接口性能测试”(可选,方便管理)。
步骤 2:添加线程组(模拟并发用户)
  1. 右键 “测试计划”→“添加”→“线程(用户)”→“线程组”;
  2. 配置线程组参数:
    • 线程数:100(模拟 100 个并发用户);
    • Ramp-Up 时间(秒):10(10 秒内启动 100 个用户,平均每秒 10 个);
    • 循环次数:5(每个用户重复请求 5 次);
    • 其他保持默认。
步骤 3:添加配置元件(统一设置接口基础信息)

为避免重复配置,用 “HTTP 请求默认值” 统一设置接口域名、端口等:

  1. 右键 “线程组”→“添加”→“配置元件”→“HTTP 请求默认值”;
  2. 配置:
    • 服务器名称或 IP:api.example.com(接口域名);
    • 端口号:80(或 443 用于 HTTPS);
    • 协议:http(或 https)。
步骤 4:添加取样器(定义接口请求)
  1. 右键 “线程组”→“添加”→“取样器”→“HTTP 请求”;
  2. 配置登录接口参数:
    • 路径:/api/login(接口路径);
    • 方法:POST
    • 内容编码:UTF-8
    • 消息体数据(请求参数,JSON 格式):
      {"username": "testuser", "password": "123456"}
      
步骤 5:添加断言(验证响应正确性)

确保接口返回正确结果(如登录成功应返回 code: 200):

  1. 右键 “HTTP 请求”→“添加”→“断言”→“JSON 断言”;
  2. 配置:
    • JSON 路径表达式:$.code(响应中 code 字段的路径);
    • 预期值:200
    • 勾选 “忽略状态”(避免因 HTTP 状态码非 200 直接断言失败)。
步骤 6:添加监听器(收集测试结果)

至少添加 2 个监听器,分别查看详细结果和汇总指标:

  1. 右键 “线程组”→“添加”→“监听器”→“查看结果树”(查看每个请求的详细响应);
  2. 右键 “线程组”→“添加”→“监听器”→“汇总报告”(查看吞吐量、平均响应时间等指标)。
步骤 7:运行测试并分析结果
  1. 点击工具栏 “启动” 按钮(绿色三角形),开始执行测试;
  2. 测试结束后,查看监听器结果:
    • 查看结果树:可筛选 “成功”/“失败” 请求,检查失败原因(如响应超时、断言失败);
    • 汇总报告:核心指标解读:
      • 样本:总请求数;
      • 平均值:平均响应时间(毫秒);
      • 90% Line:90% 的请求响应时间不超过该值(关键指标,反映大多数用户体验);
      • 吞吐量:每秒处理的请求数(越高越好);
      • 错误率:失败请求占比(越低越好)。

四、高级功能:参数化与动态数据

我们使用jmeter在实际测试中,接口参数可能需要动态变化(如不同用户登录),需通过 “参数化” 来实现。

场景:我们模拟用 100 个不同账号登录,账号密码存储在 CSV 文件中。
步骤 1:准备 CSV 数据文件

创建 users.csv,内容如下(第一行为表头):

username,password
user1,pass1
user2,pass2
...
user100,pass100
步骤 2:添加 CSV 数据文件设置
  1. 右键 “线程组”→“添加”→“配置元件”→“CSV 数据文件设置”;
  2. 配置:
    • 文件名:D:\users.csv(CSV 文件路径);
    • 变量名称:username,password(与 CSV 表头一致);
    • 分隔符:,(CSV 字段分隔符)。
步骤 3:修改 HTTP 请求参数

在 “HTTP 请求” 的消息体数据中,用 ${变量名} 引用 CSV 中的数据:

{"username": "${username}", "password": "${password}"}

运行测试时,每个线程会循环读取 CSV 中的账号密码。

五、分布式测试(模拟超高并发)

当单台机器无法模拟数万级并发(受 CPU、内存限制)时,可通过 “分布式测试” 多机协同压测:

原理:
  • 控制机(Controller):分发测试计划,收集结果(1 台);
  • 执行机(Agent):实际运行测试(多台,需与控制机网络互通)。
配置步骤:
  1. 执行机配置

    • 在所有执行机的 jmeter.propertiesbin 目录下)中添加:

      properties

      server_port=1099  # 执行机端口(默认1099)
      server_ip=执行机IP  # 执行机本机IP
      
    • 启动执行机:jmeter-server(Windows 用 jmeter-server.bat)。
  2. 控制机配置

    • 在控制机的 jmeter.properties 中添加执行机列表:

      properties

      remote_hosts=执行机1IP:1099,执行机2IP:1099  # 多个执行机用逗号分隔
      
  3. 运行分布式测试

    • 控制机上打开测试计划,菜单栏选择 运行 → 远程启动,勾选执行机即可。

六、命令行模式运行(推荐)

JMeter 的 GUI 模式耗资源,大规模测试建议用命令行模式:

# 语法:jmeter -n -t 测试计划.jmx -l 结果文件.jtl -e -o 报告目录
jmeter -n -t login_test.jmx -l result.jtl -e -o ./report

参数说明:

  • -n:非 GUI 模式;
  • -t:指定测试计划(.jmx 文件);
  • -l:生成结果文件(.jtl);
  • -e -o:生成 HTML 报告(./report 为报告目录)。

七、常用技巧与注意事项

  1. 避免 GUI 模式压测:GUI 仅用于编写测试计划,大规模测试用命令行;
  2. 合理设置线程数:逐步增加线程数(如 100→500→1000),观察性能拐点;
  3. 添加定时器:用 “固定定时器” 模拟用户思考时间(如每个请求间隔 1-3 秒,更接近真实场景);
  4. 清理结果数据:每次测试前删除旧的 .jtl 文件,避免数据混淆;
  5. 使用插件扩展功能:通过 Options → Plugins Manager 安装插件(如 JSON Extractor 提取响应中的动态参数,用于后续请求)。

总结

       所以,总的来说, JMeter 的核心流程是 “定义并发用户(线程组)→ 发送请求(取样器)→ 验证结果(断言)→ 分析指标(监听器)”。通过参数化、分布式测试等功能,可模拟复杂场景,帮助定位系统性能瓶颈(如接口响应慢、数据库瓶颈、服务器资源不足等)。掌握 JMeter 是性能测试工程师的必备技能,也是我们作为一个开发人员自测接口性能的实用工具。好了,今天就到这里,我们今天依旧是深蹲不写BUG,让我们一起加油努力!!!


文章转载自:

http://SjYeFySB.hrpbq.cn
http://r9l6pCdB.hrpbq.cn
http://762IfdUb.hrpbq.cn
http://pyl5I5QP.hrpbq.cn
http://w9QgV8tO.hrpbq.cn
http://TQXpuqvB.hrpbq.cn
http://lU36CaWr.hrpbq.cn
http://RCfk229G.hrpbq.cn
http://jP5o3Ig2.hrpbq.cn
http://Xt1yA9Vs.hrpbq.cn
http://AIZNxlZJ.hrpbq.cn
http://p3TNsiIj.hrpbq.cn
http://4FXQXVJv.hrpbq.cn
http://GRIrVivb.hrpbq.cn
http://UcRNOaDU.hrpbq.cn
http://wk9Hkk3W.hrpbq.cn
http://8eD01Nep.hrpbq.cn
http://jkxrTmMu.hrpbq.cn
http://E3Cwra1j.hrpbq.cn
http://u97avvqV.hrpbq.cn
http://exsusYjI.hrpbq.cn
http://NTiKi2YS.hrpbq.cn
http://zLSzY70V.hrpbq.cn
http://L0tAnUIm.hrpbq.cn
http://8sKhHSCP.hrpbq.cn
http://FlMRLPQf.hrpbq.cn
http://z4kbgDv3.hrpbq.cn
http://PB6S8sms.hrpbq.cn
http://vf4PQr9B.hrpbq.cn
http://N1tY2IQG.hrpbq.cn
http://www.dtcms.com/a/372337.html

相关文章:

  • 一个Java的main方法在JVM中的执行流程
  • whl编译命令使用场景举例
  • 【Leetcode】高频SQL基础题--1164.指定日期的产品价格
  • 力扣1210. 穿过迷宫的最少移动次数 详解
  • Redis 从入门到精通:全平台安装与性能优化配置指南
  • RestClient查询和数据聚合
  • 前后端中的回调机制:含义、作用与实现详解
  • 四、神经网络的学习(下)
  • 万字详解网络编程之socket
  • PNG和JPEG和BMP文件格式转换
  • 语音之战+通用大模型,AI霸权决战打响
  • eslint 和 prettier 的相同点和区别
  • 苹果 FoundationModels 秘典侠客行:隐私为先的端侧 AI 江湖
  • hot100链表类题目
  • 算法:链表
  • Vscode中开发VUE项目的调试方案
  • Lua > OpenResty HelloWorld
  • FreeRTOS项目(2)摇杆按键检测
  • 《一往无前:雷军亲述小米热血 10 年》(上部)读书笔记
  • 线性代数 | 行图像 / 列图像
  • 【PCIe EP 设备入门学习专栏 -- 8.2.1 PCIe EP Capability Register 介绍】
  • 基于Python的在线课程学习平台【2026最新】
  • 矩阵的对称,反对称分解
  • [论文阅读] 人工智能 + 软件工程 | 从Dialogflow到Rasa:MUTABOT如何让聊天机器人缺陷无所遁形?
  • 视频软件 SMPLAYER
  • AutoGPT实战体验:AI自动任务工具如何高效完成深度调研?避坑技巧分享
  • tcp粘包产生的根源
  • JavaScript 结构型模式详解
  • Cursor 提示词探索——如何打造真正懂自己的Agent
  • Selfie Vibe-AI头像生成器