【从零开始构建性能测试体系-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 的取样器提供了模拟各种协议和请求的能力,是构建真实负载测试场景的基石。熟练掌握它们的特点和配置方法,是成为一名优秀性能测试工程师的关键一步。

相关推荐
向测开进阶4 小时前
jmeter使用之--MD5加密
jmeter
qq_4924484464 小时前
Jmeter设置负载阶梯式压测场景(详解教程)
开发语言·python·jmeter
卷子的笔记~4 小时前
jmeter中使用正则表达式提取器传递参数
jmeter
SelectDB技术团队4 小时前
Apache Doris 内部数据裁剪与过滤机制的实现原理 | Deep Dive
大数据·数据库·apache·数据库系统·数据裁剪
Le_ee4 小时前
Apache2
服务器·网络安全·apache·web
im_AMBER4 小时前
Web 开发 27
前端·javascript·笔记·后端·学习·web
Lucky_Turtle4 小时前
【Java Xml】Apache Commons Digester3解析
xml·java·apache
openHiTLS密码开源社区4 小时前
Apache开源许可证:深度解析与实践指南
apache·开源软件·贡献者许可·asf·基金会·专利授权·许可证
cimeo5 小时前
【C 学习】12.2-函数补充
学习·c#