Jmeter的介绍
Jmeter是用Java编写的开源软件,主要用于进行性能和负载测试工具。最初设计用于Web应用测试,但现已扩展到测试各种服务和应用,如:
- Web应用(HTTP/HTTPS请求)
- Web服务(SOAP/REST,GraphQL)
- 数据库(JDBC)
- 消息中间件(JMS,AMQP,Kafka)
- FTP服务器
- Shell脚本/Java对象
- TCP协议
它的核心能力是模拟大量用户并发访问目标服务,并收集、分析和可视化性能指标。
Jmeter核心架构与关键组件
一个Jmeter测试脚本(.jmx文件)被称为Test Plan。其核心组件按逻辑层级如下:
- 线程组
- **定义:**所有测试的起点,模拟一组虚拟用户。
- 关键参数:
**线程数(用户数):**模拟的并发用户数量。
**Ramp-Up时间(秒):**所有线程启动完毕所需时间。例如:100线程,Ramp-Up=50,表示每秒启动2个线程。
**循环次数:**每个线程执行测试计划的次数。
2.采样器
- **定义:**向服务器发送请求并等待响应的组件。每个采样器产生一个或多个样本。
- 常见类型:
**HTTP请求:**最常用,用于测试Web和API
**JDBC请求:**用于数据库测试
**SOAP/XML-RPC请求:**用于Web Service测试
FTP请求、TCP请求等。
3.逻辑控制器
-
定义:控制采样器的执行顺序和逻辑。
-
常见类型:
-
循环控制器:循环其子元件。
-
仅一次控制器:每个线程只执行一次(如登录)。
-
交替控制器:轮流执行其子元件。
-
事务控制器:将其子元件的所有采样器合并为一个事务样本。
-
If控制器:根据条件执行。
-
随机控制器/随机顺序控制器:用于模拟随机行为。
4. 监听器
-
定义:用于收集、展示和分析测试结果。
-
常见类型:
-
查看结果树:查看每个请求和响应的详细信息(调试用,正式压测时应禁用,非常耗资源)。
-
聚合报告:提供汇总统计数据(平均值、中位数、吞吐量、错误率等),最常用。
-
响应时间图/聚合图:以图形方式展示响应时间、吞吐量等随时间变化趋势。
-
后端监听器:将结果实时发送到数据库或监控系统(如 InfluxDB + Grafana)。
-
5. 配置元件
-
定义:为采样器提供配置信息或共享数据。
-
常见类型:
-
HTTP请求默认值:为所有HTTP请求设置默认的服务器、端口、协议等。
-
HTTP信息头管理器:管理请求头(如 Content-Type, Authorization)。
-
CSV数据文件设置:从外部CSV文件读取参数化数据,实现数据驱动测试。
-
用户定义的变量:定义全局变量。
-
登录配置元件:用于HTTP基本认证。
-
6. 前置处理器 & 后置处理器
-
前置处理器 :在采样器执行前 运行。常用:
用户参数、JSR223 PreProcessor(用脚本动态生成数据)。 -
后置处理器 :在采样器执行后 运行。最常用:
正则表达式提取器、JSON提取器,用于从响应中提取数据(如token、session ID)供后续请求使用。
7. 断言
-
定义:验证服务器返回的响应是否符合预期。
-
常见类型:响应断言(检查文本、代码)、持续时间断言(检查响应时间)、JSON断言、XPath断言等。
8. 定时器
-
定义 :在请求之间插入停顿,用于控制吞吐量,模拟用户思考时间,避免瞬间压力过大。
-
常见类型:固定定时器、高斯随机定时器、同步定时器(用于制造瞬间并发,如"集合点")。
典型的应用场景:
- **API接口性能测试:**测试微服务或RESTful API的并发处理能力。
- **网站负载测试:**模拟电商大促、新闻热点场景下的用户访问。
- **数据库性能测试:**测试不同SQL语句在高并发下的执行效率。
- **全链路压测:**结合多个采样器和逻辑控制器,模拟完整的用户业务流程(如登录-浏览-加购-支付)。