一文带你了解什么是JMeter
概述
Apache JMeter 是一个开源的、基于Java的压力测试工具,最初被设计用于Web应用测试,但后来扩展到其他测试领域。以下是JMeter的一些详细介绍:
JMeter的主要功能:
- 性能测试:JMeter可以模拟服务器、网络或对象在不同压力类别下的负载,测试它们的强度和分析整体性能。
- 回归测试:JMeter能够对应用程序做回归测试,通过创建带有断言的脚本来验证程序返回了预期的结果。
- 支持多种服务类型测试:JMeter支持对Web(HTTP, HTTPS)、SOAP/REST Webservices、FTP、Database via JDBC等多种服务类型进行测试。
- 高可移植性:作为一个100%的纯Java程序,JMeter具有高可移植性。
- 多线程框架:允许通过多个线程并发取样及通过独立的线程组对不同的功能同时取样。
- GUI支持:精心设计的GUI支持高速用户操作和精确计时。
- 缓存/离线分析:支持缓存/离线的方式分析/回放测试结果。
- 高扩展性:JMeter具备高扩展性,支持通过插件扩展其功能。
JMeter的工作原理:
JMeter可以作为Web服务器与浏览器之间的代理网关,捕获浏览器的请求和服务器的响应,生成性能测试脚本,并通过线程组模拟真实用户对Web服务器的访问压力。
JMeter的应用场景:
- Web应用性能测试:模拟用户访问Web应用程序,测试其响应时间和吞吐量。
- 服务器性能测试:通过模拟高并发请求来评估服务器的最大承载能力。
- 数据库性能测试:测试数据库连接的性能,评估数据库的响应时间。
- 网络性能测试:测试网络传输速度和稳定性。
- 桌面应用性能测试:测试桌面应用程序的性能。
JMeter的组件介绍:
- 线程组(Thread Group):定义测试的并发用户数量和循环次数。
- 取样器(Sampler):用于向服务器发送请求,如HTTP请求、JDBC请求等。
- 逻辑控制器(Logical Controller):控制测试的执行逻辑,如循环、条件判断等。
- 前置处理器(PreProcessor)和后置处理器(PostProcessor):在请求发送前或收到响应后处理数据。
- 断言(Assertion):验证响应是否符合预期。
- 监听器(Listener):展示测试结果,如查看结果树、聚合报告等。
- 配置元件(Config Element):设置测试中使用的参数和变量。
- 定时器(Timer):控制请求之间的时间间隔。
JMeter是一个功能强大且灵活的工具,适用于各种性能测试场景,并且由于其开源性质,被广泛使用于全球的软件开发和测试社区中。
实践说明
JMeter是一种流行的开源性能测试工具,用于对软件和服务器进行负载和压力测试。以下是JMeter实践的基本步骤和一些关键点:
JMeter实践基本步骤:
-
编辑测试计划(Test Plan):
- 打开JMeter,创建一个新的测试计划,这是所有测试元件的容器。
-
创建线程组(Thread Group):
- 线程组定义了虚拟用户的数量和它们的行为。你可以设置线程数(虚拟用户数)、Ramp-Up Period(启动时间,即所有线程启动所需的时间)和循环次数。
-
创建HTTP请求(HTTP Request):
- 在线程组下添加HTTP请求,配置请求的URL、方法(GET/POST)、参数等。
-
添加监听器查看结果(View Results Tree):
- 添加监听器来查看请求的结果,例如"查看结果树"可以显示请求的详细信息,包括请求和响应数据。
-
发送请求,查看结果:
- 运行测试计划,JMeter会根据线程组的设置发送请求,并在监听器中显示结果。
JMeter实践关键点:
-
使用正确的线程数:
- 根据硬件性能和测试计划设计确定合适的线程数。过多的线程可能会导致测试结果不准确。
-
使用HTTP(S)测试脚本记录器:
- JMeter可以录制HTTP请求,自动生成测试脚本。
-
参数化和传参:
- 在接口测试中,JMeter支持多种参数化技术,如CSV Data Set Config、用户定义的变量、数据库提取数据等,以及使用JSON提取器、正则表达式、BeanShell后置处理器等进行参数传递和处理。
-
测试结果分析:
- JMeter提供了多种测试报告,如聚合报告和HTML格式的测试报告,帮助分析测试结果。
-
插件扩展:
- JMeter插件如JMeterPlugins-Standard和JMeterPlugins-Extras提供了额外的功能,如更详细的图表和统计信息。
-
负载测试运行:
- 在进行负载测试时,需要正确调整机器大小、操作系统调优和Java安装,以确保JMeter能够高效运行。
-
增加Java堆大小:
- 默认情况下,JMeter以1GB的堆运行,这可能不足以用于大型测试,具体取决于测试计划和线程数。可以通过设置环境变量来增加Java堆大小。
通过遵循这些步骤和关键点,你可以有效地使用JMeter来进行性能测试和接口测试。JMeter的灵活性和强大的功能使其成为性能测试领域的一个宝贵工具。
JMeter支持哪些参数化技术?
JMeter支持多种参数化技术,以下是一些常用的参数化方法:
-
CSV Data Set Config:
- 这是最常用的参数化方法,适用于参数取值范围较大、灵活性强的场景。通过读取CSV文件中的数据并生成变量,被JMeter脚本引用,实现参数化。
- 在线程组右键添加配置元件,选择CSV Data Set Config,设置文件路径、变量名称和分隔符等参数。
-
User Parameters:
- 适用于参数取值范围很小的场景。通过添加前置处理器中的用户参数,可以添加多个参数和对应的值。
- 每个线程会一直使用一组数据,例如设置4个线程并发,那么线程1使用用户_1的数据,线程2使用用户_2的数据,以此类推。
-
函数助手(Function Helper):
- 使用JMeter提供的函数生成参数,如
__Random
函数,可以生成随机数字和随机字符串实现参数化。 - 通过菜单"选项"->"函数助手对话框",即可在"函数助手"弹出框上找到JMeter提供的多种函数。
- 使用JMeter提供的函数生成参数,如
-
用户定义的变量(User Defined Variables):
- 用户自定义变量更多用于设置全局变量,如参数化文件路径、host、url等。
- 在线程组或测试计划上右键添加配置元件,选择用户定义的变量,添加变量名和相对应的值。
-
HTTP请求默认值:
- 对于请求中不变的参数,如URL、端口等,可以使用HTTP请求默认值元件,避免在每个请求中重复填写。
这些参数化技术可以帮助测试人员根据不同的测试需求和场景,灵活地管理和使用测试数据,实现数据驱动的测试。
常见插件及其功能
JMeter插件可以显著扩展其功能,以下是一些常用的JMeter插件及其扩展的功能:
-
JMeter Plugins Manager:
- 这是一个插件管理工具,允许用户在JMeter内部搜索、安装、卸载和更新其他插件。通过JMeter Plugins Manager,用户可以轻松管理JMeter插件,无需手动下载和添加jar文件。
-
Basic Graphs:
- 包含三个插件,用于在性能测试中监控关键指标:
- Transactions per Second(TPS):监控每秒事务数。
- Response Times Over Time(TRT):监控事务响应时间。
- Active Threads Over Time:统计每秒活动的线程总数。
- 包含三个插件,用于在性能测试中监控关键指标:
-
PerfMon Metrics Collector:
- 服务器性能监控数据采集器,用于在性能测试中实时监控服务器的资源使用情况,如CPU、内存、I/O等。
-
Custom Thread Groups:
- 提供了额外的线程组类型,如阶梯式加压线程组(jp@gc - Stepping Thread Group),允许用户以非线性方式增加线程压力。
-
WebSocket Samplers:
- 允许JMeter进行WebSocket通信的插件,包括WebSocket Open Connection和WebSocket request-response Sampler取样器。
-
jpgc - Standard Set:
- 包含多个有用的插件,如阶梯式加压线程组和多种监听器,用于监控TPS、响应时间和线程活动。
-
Composite Graph:
- 允许同时展示多个图表,使得用户可以在一个界面上比较不同的性能指标。
-
Bytes Throughput Over Time:
- 展示不同时间的吞吐量(按字节Bytes展示),与聚合报告中的Throughput(按请求个数展示)相辅相成。
-
HTML Report:
- 生成HTML格式的测试报告,提供更丰富的结果分析和可视化展示。
-
JSON Path Assertion:
- 用于处理JSON格式数据的插件,可以根据JSON路径表达式提取字段并进行断言判断。
通过这些插件,JMeter能够提供更全面的性能测试支持,包括更复杂的测试场景模拟、更详细的结果分析和更强大的数据处理能力。使用这些插件可以显著提升测试效率和准确性。