【从零开始构建性能测试体系-02】 Apache JMeter 取样器指南:从入门到精通

【碎片化学习】 Apache JMeter 取样器指南:从入门到精通

工欲善其事必先利其器,对于做性能测试的小伙伴来说,手头有一款强大并且能够熟练使用的测试工具至关重要。Apache JMeter 就是这样的一款强大的开源性能测试工具,广泛应用于负载测试、压力测试、功能测试等场景。JMeter 通过多种取样器(Sampler)模拟不同的用户请求,测试目标应用的响应时间、吞吐量、稳定性等性能指标。每种取样器都有其独特的功能,本文将介绍 JMeter 中所有常见的取样器,包括取样器的英文名称、中文名称、用途、适用场景、配置参数及对应的 JMeter 版本。

一、取样器通用概念

在深入每个取样器之前,需要理解几个通用概念:

  • 作用域 :取样器必须被包含在一个线程组内。线程组控制着执行取样器的虚拟用户数量和行为。
  • 执行顺序:在同一个线程组内,取样器会按照它们在测试树中从上到下的顺序依次执行。
  • 配置元件 :取样器通常与配置元件(如 HTTP 请求默认值、HTTP 信息头管理器、CSV 数据文件设置)配合使用,以简化配置和数据驱动测试。
  • 监听器 :为了查看取样器的结果,需要添加监听器(如查看结果树、聚合报告)来记录和展示响应数据与性能指标。

二、核心取样器详解

以下是 JMeter 主要内置取样器的详细介绍。除非特别说明,这些取样器在 JMeter 的近期版本(如 3.x, 4.x, 5.x)中均稳定存在。

1. HTTP 请求(HTTP Request)
  • 中文名: HTTP 请求
  • 用途: 模拟发送 HTTP/HTTPS 请求,是 Web 应用性能测试中最常用、最核心的取样器。
  • 适用场景
    • 测试网站、RESTful API、SOAP Web Service 的性能。
    • 模拟 GET, POST, PUT, DELETE, PATCH 等 HTTP 方法。
    • 文件上传和下载测试。
  • 关键配置参数
    • 协议httphttps
    • 服务器名称或 IP: 目标服务器的主机名或 IP 地址。
    • 端口号: 服务器的端口(如 80, 443, 8080)。
    • HTTP 请求: 选择请求方法(GET, POST 等)。
    • 路径 : 请求的 URI 路径(如 /api/users)。
    • 参数: 添加 URL 参数或表单参数。
    • 消息体数据: 用于 POST/PUT 等方法,发送 JSON、XML 等原始数据。
    • 文件上传: 指定要上传的文件路径和参数名。
2. JDBC 请求(JDBC Request)
  • 中文名: JDBC 请求
  • 用途: 向数据库发送 SQL 查询或更新语句,用于直接测试数据库性能。
  • 适用场景
    • 测试特定 SQL 语句的执行时间。
    • 验证数据库架构的性能瓶颈。
    • 在压力下测试存储过程。
  • 关键配置参数
    • 变量名称 : 必须与 JDBC 连接配置 元件中定义的名称一致。
    • SQL Query : 输入要执行的 SQL 语句。支持使用 ${变量} 进行参数化。
    • 参数值 : 如果 SQL 中使用 ? 作为占位符,在此处提供参数值。
    • 参数类型 : 指定对应参数的数据类型(如 INTEGER, VARCHAR)。
    • 查询类型 : 选择语句类型(Select Statement, Update Statement 等),帮助 JMeter 处理结果。
3. TCP 取样器(TCP Sampler)
  • 中文名: TCP 取样器
  • 用途: 通过 TCP 协议向服务器发送消息并接收响应,用于测试非 HTTP 的定制化网络服务。
  • 适用场景
    • 测试消息队列(如 RabbitMQ、ActiveMQ 的原始 TCP 接口)。
    • 测试自定义的 Socket 服务器、游戏服务器、电信协议。
    • 测试基于 Telnet, SSH 等的服务。
  • 关键配置参数
    • TCPClient classname : 指定实现 TCP 协议的类(如 TCPClientImpl, BinaryTCPClientImpl)。
    • 服务器名称或 IP: 目标服务器地址。
    • 端口号: 目标端口。
    • 文本/二进制消息: 要发送的请求数据。
    • 重用连接: 是否在同一个线程内复用 TCP 连接。
    • End of line (EOL) byte value: 指定行结束符,用于判断响应结束。
4. Java 请求(Java Request)
  • 中文名: Java 请求
  • 用途: 用于测试自定义的 Java 类(而非远程服务)。这些类需要实现特定的接口。
  • 适用场景
    • 测试业务逻辑层或工具类的性能,无需启动整个应用服务器。
    • 与 JMeter 深度集成,调用已有的 Java 测试代码。
  • 关键配置参数
    • 类名称 : 从下拉列表中选择一个已实现的 Java 类(JMeter 自带一些示例,如 SleepTest)。
    • 参数: 传递给该类的参数。
5. 调试取样器(Debug Sampler)
  • 中文名: 调试取样器
  • 用途 : 它本身不向服务器发送请求,而是显示 JMeter 在运行时的变量和属性值。这是一个调试工具
  • 适用场景
    • 在脚本开发阶段,检查变量(如从 CSV 文件读取的、从正则表达式提取的)是否正确赋值。
    • 验证配置元件的效果。
  • 关键配置参数
    • JMeter 属性: 是否显示 JMeter 属性。
    • JMeter 变量: 是否显示 JMeter 变量(最常用)。
    • 系统属性: 是否显示系统属性。
6. 访问日志取样器(Access Log Sampler)
  • 中文名: 访问日志取样器
  • 用途: 通过解析 Web 服务器(如 Apache, Nginx)的访问日志文件,来动态生成 HTTP 请求。它可以非常真实地模拟用户流量。
  • 适用场景
    • 根据真实的生产环境访问日志回放流量,进行压力测试。
    • 生成高度逼真的混合请求场景(不同 URL、方法、参数)。
  • 关键配置参数
    • 日志文件: 访问日志文件的路径。
    • 日志格式 : 指定日志的格式(如 Common, Combined 或自定义格式)。
7. SMTP 取样器(SMTP Sampler)
  • 中文名: SMTP 取样器
  • 用途: 模拟一个电子邮件客户端,通过 SMTP 协议发送邮件。可以测试邮件服务器的性能。
  • 适用场景
    • 测试邮件发送服务器的负载能力。
    • 模拟大量用户注册、通知等邮件发送场景。
  • 关键配置参数
    • 服务器设置: SMTP 服务器地址、端口、是否使用 SSL/TLS。
    • 登录信息: 发件人邮箱的用户名和密码。
    • 邮件内容: 发件人、收件人、抄送、主题、邮件正文。
8. FTP 请求(FTP Request)
  • 中文名: FTP 请求
  • 用途 : 模拟 FTP 客户端,执行文件上传(STOR)、下载(RETR)和删除(DELE)等操作。
  • 适用场景
    • 测试 FTP 服务器的文件传输性能。
    • 模拟批量文件处理场景。
  • 关键配置参数
    • 服务器信息: 服务器地址、端口、远程文件路径、本地文件路径。
    • 登录信息: 用户名和密码。
    • 操作 : 选择 RETR(下载)、STOR(上传)等命令。

三、其他取样器(简要介绍)

英文名 中文名 用途简介 适用场景
SOAP/XML-RPC Request SOAP/XML-RPC 请求 专门用于测试 SOAP Web Service。 老旧的基于 SOAP 的 Web 服务。注意 :现代 RESTful API 测试通常使用 HTTP 请求
BeanShell Sampler BeanShell 取样器 允许使用 BeanShell 脚本语言编写自定义逻辑。 需要复杂逻辑控制、数据处理或与 Java 代码交互的场景。
JMS Publisher/Subscriber JMS 发布/订阅 用于测试 Java 消息服务。 测试消息中间件(如 ActiveMQ, IBM MQ)的性能。
JUnit Request JUnit 请求 用于运行已有的 JUnit 测试用例。 将现有的单元测试转化为负载测试。
LDAP Request LDAP 请求 测试 LDAP 目录服务的性能。 测试用户认证、目录查询等操作。
Mail Reader Sampler 邮件读取取样器 通过 POP3 或 IMAP 协议读取邮件。 测试邮件接收服务器的性能。

四、版本说明与总结

  • 版本兼容性: 上述核心取样器(如 HTTP 请求、JDBC 请求、TCP 取样器)在 JMeter 的长期发展中非常稳定,从较早的 2.x 版本到最新的 5.x 版本都得到了良好支持。
  • 插件增强 : JMeter 的强大之处在于其插件生态系统。通过安装 JMeter Plugins Manager ,你可以获得更多第三方或社区开发的取样器,例如:
    • MQTT 取样器: 用于测试 IoT 常用的 MQTT 协议。
    • Selenium/WebDriver 取样器: 用于模拟真实浏览器的行为(但资源消耗较大)。
  • 选择原则 : 选择哪个取样器完全取决于你的测试目标。绝大多数现代 Web API 和微服务测试,使用 HTTP 请求 取样器就已足够。对于数据库、消息队列等特定协议,再选择对应的专用取样器。
写在最后

JMeter 的取样器提供了模拟各种协议和请求的能力,是构建真实负载测试场景的基石。熟练掌握它们的特点和配置方法,是成为一名优秀性能测试工程师的关键一步。

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛2 天前
计算机系统概论——校验码
学习
babe小鑫2 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms2 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下2 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。2 天前
2026.2.25监控学习
学习
im_AMBER2 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J2 天前
从“Hello World“ 开始 C++
c语言·c++·学习