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

详细介绍 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.dtcms.com/a/361229.html

相关文章:

  • Java泛型通配符详解:搞懂?/extends/super用法,避开集合操作踩坑点
  • 快递地址归类排序实现(Java Python)
  • Jenkins 自动构建Vue 项目的一个大坑
  • JVM核心机制:类加载与内存结构详解
  • OpenHarmony智能语音框架深度拆解:从VAD到唤醒词打造你的AI语音智能体
  • 自动化软件测试工具Parasoft C/C++test如何实现运行时错误的检测与修复
  • 面试经典150题[021]:反转字符串中的单词(LeetCode 151)
  • 【XR技术概念科普】VST(视频透视)vs OST(光学透视):解码MR头显的两种核心技术路径
  • 「数据获取」《中国住户调查年鉴》(2000-2024)(获取方式看绑定的资源)
  • SQLark:一款面向信创应用开发者的数据库开发和管理工具
  • Jmeter实现参数化的4种方式
  • Windows神器,按键屏蔽
  • 【机器学习学习笔记】pandas基础
  • (纯新手教学)计算机视觉(opencv)实战十二——模板匹配(cv2.matchTemplate)
  • UE角色取消被Decal影响
  • Jetson AGX Orin平台R36.3.0版本1080P25fps MIPI相机图像采集异常调试记录
  • 基于单片机电动车充电桩/充电车棚环境监测设计
  • 基于RS-485接口的芯片的FPGA驱动程序
  • 吴恩达机器学习作业十二:协同过滤(电影推荐系统)
  • 广电手机卡到底好不好?
  • Git基础使用和PR贡献
  • .Net程序员就业现状以及学习路线图(二)
  • Android面试指南(六)
  • 大模型落地全流程实践:从技术选型到企业级部署
  • 音视频开发入门:FFmpeg vs GStreamer,新手该如何选择?
  • 松灵斯坦福Mobile ALOHA同款 | 通过低成本全身远程操作实现双手机器人移动操控学习
  • 01数据结构-红黑树
  • 永磁同步电机无速度算法--高频脉振方波注入法(测量轴系转子位置误差信号解耦处理)
  • Spark引擎中RDD的性质
  • 【牛客JZ31】—栈的压入弹出序列判断算法详解