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

详细介绍 JMeter 性能测试

这是一份从入门到核心概念的全面指南,旨在帮助您系统地理解 JMeter。

一、JMeter 是什么?

Apache JMeter 是一个纯 Java 开发的开源软件,最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。它是性能测试领域最流行和广泛使用的工具之一

核心用途:模拟大量用户负载(并发用户),对服务器、网络或对象施加压力,以测试其强度、负载能力、性能、稳定性和/或可扩展性。

二、JMeter 的主要特点和优势

  1. 开源且免费:无需支付任何费用,社区活跃,资源丰富。

  2. 跨平台:基于 Java,可以在任何支持 Java 虚拟机的操作系统上运行(如 Windows, Linux, Mac)。

  3. 多协议支持:不仅支持 HTTP/HTTPS,还支持 FTP、JDBC(数据库)、JMS、SOAP、TCP 等众多协议。

  4. 强大的图形化界面(GUI):便于创建和调试测试计划(Test Plan)。

  5. 命令行模式(CLI):用于真正执行性能测试,可以节省系统资源,更容易集成到 CI/CD 流程中。

  6. 高可扩展性:允许用户编写自定义的 Sampler、函数、监听器等,也可以通过插件管理器安装丰富的第三方插件。

  7. 完整的多线程框架:允许通过多个线程并发采样,模拟来自不同用户的并发请求。

  8. 数据驱动测试:支持从 CSV、XML、JSON 等文件中读取测试数据,实现参数化。

三、JMeter 的核心概念(重要!)

要理解 JMeter,必须先理解其测试计划中的核心元件:

  • 测试计划 (Test Plan):测试的起点和容器,所有其他元件都必须放在测试计划下。

  • 线程组 (Thread Group)定义测试的并发用户模型。这是任何性能测试的起点。你可以设置线程数(用户数)、循环次数、启动时间等。

  • 采样器 (Sampler)定义要发送的请求类型。例如 HTTP 请求、JDBC 请求、FTP 请求等。它告诉 JMeter 要向服务器发送什么类型的请求。

  • 监听器 (Listener)用于收集、查看和保存测试结果。例如查看结果树、聚合报告、图形结果等。注意:在正式压测时,应禁用或减少监听器,因为它们非常消耗资源。

  • 配置元件 (Config Element)用于配置采样器发出的请求。例如 HTTP 请求默认值(设置公共的 URL、端口)、CSV 数据文件设置(参数化)等。

  • 前置处理器 (Pre Processor):在采样器发出请求之前执行。常用于修改请求的设置、提取数据或参数化。

  • 后置处理器 (Post Processor):在采样器发出请求之后执行。常用于从响应中提取数据(如 Token、Session ID),供后续请求使用。

  • 断言 (Assertion)检查响应结果是否符合预期。用于验证测试结果是否正确,例如检查响应中是否包含特定文本或 JSON 路径的值是否正确。

  • 定时器 (Timer)用于设置请求之间的延迟(思考时间)。模拟真实用户操作之间的停顿。如果不设置定时器,JMeter 会以最快速度发送请求,这可能不是真实的场景。

  • 逻辑控制器 (Logic Controller)控制采样器的执行逻辑。例如循环控制器、如果(If)控制器、事务控制器等,用于实现复杂的测试逻辑。

四、一个典型的 JMeter 性能测试流程

  1. 需求分析与测试计划设计

    • 确定测试目标:例如,找出系统在 1000 并发用户下的响应时间和吞吐量。

    • 确定测试场景:例如,用户登录、浏览商品、下单。

  2. 脚本录制或编写

    • 录制:使用 JMeter 的 HTTP(S) 测试脚本录制器(代理服务器)来录制浏览器操作,快速生成脚本骨架。

    • 手动编写:手动添加线程组、采样器、定时器等元件来构建脚本。

  3. 脚本增强与调试

    • 参数化:使用 CSV 文件替换脚本中的固定值(如用户名、密码)。

    • 关联:使用后置处理器(如正则表达式提取器或 JSON 提取器)从响应中提取动态值,并传递给后续请求。

    • 添加断言:验证请求是否成功返回。

    • 添加监听器(如查看结果树):在 GUI 模式下运行调试,确保脚本逻辑正确。

  4. 执行测试(使用命令行模式)

    • 永远不要在 GUI 模式下进行正式压测! GUI 模式会消耗大量资源,影响测试结果。

    • 使用命令 jmeter -n -t [testplan.jmx] -l [result.csv] 在无界面模式下运行测试,并将结果保存到 CSV 文件。

  5. 结果分析与报告

    • 使用聚合报告、汇总报告等监听器导入保存的结果文件进行分析。

    • 关注核心性能指标:

      • 响应时间 (Response Time):服务器处理请求所需的时间。重点关注 90% 或 95% 百分位数。

      • 吞吐量 (Throughput):服务器每秒处理的请求数。是衡量系统处理能力的核心指标。

      • 错误率 (Error Rate):失败请求的百分比。

      • 并发用户数 (Active Threads):模拟的用户数量。

  6. 问题定位与优化

    • 根据性能指标和系统监控(如服务器 CPU、内存、磁盘 I/O、网络 I/O、应用日志、数据库慢查询等),定位性能瓶颈。

    • 配合开发团队进行优化,然后重新测试,验证优化效果。

五、关键性能指标解读

  • 样本 (Samples):总共发出的请求数量。

  • 平均值 (Average):所有请求的平均响应时间。

  • 中位数 (Median):响应时间的中间值,50% 的请求响应时间低于此值。

  • 90% 百分位 (90% Line):90% 的请求响应时间都小于这个值。这个值比平均值更能反映大部分用户的体验。非常重要

  • 最小值 (Min) / 最大值 (Max):最快和最慢的响应时间。

  • 异常率 (Error %):出错请求的百分比。

  • 吞吐量 (Throughput):每秒处理的请求数(requests per second)。越高代表系统性能越好

  • 接收/发送 KB/sec:网络吞吐量。

六、最佳实践与注意事项

  1. 不用 GUI 压测:正式测试一定使用命令行模式 (-n -t)。

  2. 禁用不需要的监听器:监听器会消耗大量内存和 CPU,尤其是在测试过程中实时查看。应将结果保存到 CSV/JTL 文件,事后再加载分析。

  3. 参数化与关联:确保测试脚本模拟的是真实用户行为,而不是所有用户都做一模一样的事情。

  4. 合理设置线程数:从一个较低的并发数开始,逐步增加(阶梯加压),观察系统性能变化曲线,找到性能拐点。

  5. 施加足够的压力:单台 JMeter 机器可能无法产生足够压力来压垮服务器端。此时需要使用分布式测试,由一台控制机(Master)控制多台压力机(Slave)来共同产生压力。

  6. 监控系统资源:压测时,一定要同时监控被测服务器的各项资源指标(CPU、内存、磁盘、网络),才能准确定位瓶颈是在应用服务器、数据库还是网络。

总结

JMeter 是一个功能强大、灵活且社区支持极佳的性能测试工具。掌握它的核心概念和测试流程,可以帮助你有效地对 Web 应用、API 接口、数据库等各种服务进行压力测试、负载测试和稳定性测试,从而保障软件系统的性能和质量。

希望这份介绍对您有帮助!如果您有任何更具体的问题,欢迎继续提问。

干货!jmeter性能测试压测场景实战案例,全程干货,入门到精通一课打通!

http://www.xdnf.cn/news/19705.html

相关文章:

  • Mac idea 格式化代码快捷键
  • 第 94 场周赛:叶子相似的树、模拟行走机器人、爱吃香蕉的珂珂、最长的斐波那契子序列的长度
  • 【C++】什么是智能指针及应用
  • 六大关键步骤:用MES系统重构生产计划管理闭环
  • 从能耗黑洞到精准智控:ASCB2智慧空开重构高校宿舍用电能效模型
  • 均值滤波和中值滤波的简介、C语言实现和实测
  • Adobe Photoshop 2025 最新下载安装教程,附PS2025下载
  • 【项目】多模态RAG必备神器—olmOCR重塑PDF文本提取格局
  • 智慧水利系统解决方案-水利信息化平台
  • linux连接服务器sftp无法输入中文
  • 直播预告 | Excelize 跨语言实战
  • 代码随想录二刷之“回溯”~GO
  • Linux系统中yum包管理器安装软件时遇到的网络连接问题
  • 线上API接口响应慢?一套高效排查与定位问题的心法
  • 【frontend】w3c的发展历史ToDo
  • 基于Springboot + vue3实现的时尚美妆电商网站
  • MySQL 之索引的结构、分类与语法
  • 四个典型框架对比
  • 在 Unity 中调用腾讯云机器翻译
  • 一个好的智能体框架应该是什么样子
  • Activiti流程引擎的用户体系与MIS系统的用户体系打通
  • 一、Git与Gitee常见问题解答
  • 深度学习跨领域应用探索:从技术落地到行业变革
  • pcl案例2 叶片与根茎的分离step2
  • MyBatis 性能优化最佳实践:从 SQL 到连接池的全面调优指南
  • Java网络编程基础 Socket通信入门指南
  • 机器视觉软件--VisionPro、Visual Master,Halcon 和 OpenCV 的学习路线
  • 从零开始学习n8n-定时器+HTTP+飞书多维表格(上)
  • UFUNCTION C++ 的再次理解
  • 产品月报|睿本云8月产品功能迭代