Jmeter-初步使用

系列文章目录

Jmeter-初步使用


文章目录


前言

公司项目需要压测,主要是TCP、HTTP,发现一款免费,开源的产品JMeter


一、JMeter概念和作用

JMeter 的概念

JMeter 是一款由 Apache 组织开发的开源负载测试工具,主要用于性能测试和功能测试。它基于 Java 平台,支持多协议(如 HTTP、HTTPS、FTP、JDBC 等),能够模拟高并发用户请求,测试系统的性能、稳定性和负载能力。

JMeter 的主要作用

性能测试 :通过模拟大量用户并发请求,测试系统在高负载下的响应时间、吞吐量、资源占用等性能指标。
负载测试 :逐步增加用户负载,观察系统在不同压力下的表现,确定性能瓶颈。
压力测试 :通过极端负载条件测试系统的极限能力,验证系统在崩溃前的最大承载量。
功能测试 :支持对 Web 应用、API、数据库等进行功能验证,检查请求和响应的正确性。
分布式测试:支持多台机器协同生成负载,模拟更大规模的并发用户。

JMeter 的核心特点

  • 跨平台:基于 Java,可在 Windows、Linux、macOS 等系统运行。
  • 多协议支持:支持 HTTP、HTTPS、SOAP、REST、FTP、JDBC 等协议。
  • 可视化结果分析:提供图表和报告生成功能,便于分析测试结果。
  • 可扩展性:通过插件支持更多功能(如 Kafka、MQTT 等协议测试)。
  • 脚本录制:可通过代理录制用户操作,自动生成测试脚本。

JMeter 的典型应用场景

  • Web 应用性能测试(如电商网站秒杀活动模拟)。
  • API 接口性能验证(如微服务架构下的接口压测)。
  • 数据库性能测试(如 SQL 查询效率分析)。
  • 消息中间件测试(如 Kafka 或 RabbitMQ 的吞吐量测试)。

二、使用步骤

下载安装

下载window版本,需要安装JDK1.8

这里下载的是二进制包,直接可以安装使用,想改源码的,下载source

JMeter界面功能介绍

运行

进入 安装目录/bin下,执行jmeter.bat

JMeter主界面区域概览

JMeter的图形用户界面(GUI)分为多个功能区域,每个区域负责不同的任务管理。以下是核心区域的说明:

菜单栏

位于窗口顶部,包含文件操作(新建、打开、保存)、测试计划配置、运行控制(启动、停止)、选项设置及帮助文档入口。

工具栏

提供常用操作的快捷按钮,如运行测试、停止测试、清除结果等。支持快速访问测试元件添加功能。

树状测试计划面板

左侧以树形结构显示测试计划的完整层次,包含线程组、逻辑控制器、采样器、监听器等元件。可通过右键菜单添加或删除组件。

元件配置面板

当选中树状面板中的某个元件时,右侧会显示该元件的详细配置选项,例如HTTP请求的路径、参数、头部信息等。

日志/结果面板

底部区域显示系统日志(如错误信息)和测试结果。通过"View Results Tree"等监听器可查看请求响应详情。


核心功能组件说明

线程组(Thread Group)

定义虚拟用户数量和行为模式,包括线程数(并发用户)、循环次数、启动延迟等。是负载测试的基础配置单元。

采样器(Samplers)

模拟用户请求类型,如HTTP请求、JDBC查询、FTP操作等。每个采样器对应一种协议或操作。

逻辑控制器(Logic Controllers)

控制测试流程,包括循环(Loop Controller)、条件判断(If Controller)、随机顺序(Random Order)等。

监听器(Listeners)

收集和展示测试结果,支持表格(View Results in Table)、图形(Graph Results)、聚合报告(Aggregate Report)等多种形式。

配置元件(Config Elements)

提供全局配置,如HTTP请求默认值、CSV数据文件设置、用户定义的变量等。

断言(Assertions)

验证响应结果是否符合预期,例如检查响应代码、文本内容或响应时间阈值。

定时器(Timers)

模拟真实用户操作间隔,包含固定定时器(Constant Timer)、高斯随机定时器(Gaussian Random Timer)等。


常用操作技巧

快速添加元件

在树状面板中右键点击目标位置,通过"Add"菜单选择所需元件。支持快捷键操作(如Ctrl+Shift+A快速添加HTTP请求)。

参数化测试数据

使用CSV Data Set Config元件从外部文件读取变量,或在用户定义的变量中设置静态参数。

调试测试计划

通过View Results Tree监听器实时查看请求和响应详情,结合Debug Sampler检查变量值。

分布式测试配置

在远程机器上启动JMeter-server,通过主控机的JMeter GUI配置远程主机IP进行分布式压测。

非GUI模式运行

使用命令行执行测试计划以减少资源消耗:

bash 复制代码
jmeter -n -t testplan.jmx -l result.jtl

实战

TCP接口

  • 右键->添加->配置元件->TCP采样配置,如下图
  • 配置TCPClient classname为 org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl
  • 配置IP、端口,关闭连接勾上,否则执行无法自动结束,行尾(EOL)字节值,是TCP请求的返回值最后一个字节转byte,范围[-128,127]
  • 发送内容部分是字节数组转16进制文本,附上java代码
java 复制代码
public static String bytesToHexString(byte[] src)
    {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0)
        {
            return null;
        }
        for (int i = 0; i < src.length; i++)
        {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2)
            {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

TCP采样器基本配置

在JMeter中,TCP采样器用于测试基于TCP协议的服务,如自定义二进制协议或文本协议。主要配置参数包括:

  • Server Name or IP:目标服务器地址
  • Port Number:服务监听端口
  • Re-use connection:是否复用TCP连接
  • Close connection:请求后是否关闭连接
  • SO_LINGER:设置socket延迟关闭时间(秒)
  • End of line (EOL):指定行结束符(十进制值)

高级参数配置

Timeout设置

  • Response Timeout:等待响应超时时间(毫秒)
  • Connect Timeout:建立连接超时时间(毫秒)

数据编码配置

  • Request Data:支持文本或十六进制格式
  • Text encoding:指定字符编码(如UTF-8)
  • Hex:勾选后以十六进制格式发送数据

特殊选项

TCPClient实现类

  • TCPClient classname :可指定自定义实现类(默认org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl
  • Binary prefixes:处理二进制数据时是否添加长度前缀

SSL配置

  • Use SSL:启用SSL/TLS加密通信
  • SSL Protocol:指定协议版本(如TLSv1.2)

响应处理

EOL处理

  • 设置eolByte参数处理行尾符
  • 支持十进制值输入(如10表示\n

响应超时机制

  • 通过tcp.handler参数控制响应结束条件
  • 可配置固定长度响应或结束符检测

以下是一个典型TCP请求的配置示例:

java 复制代码
TCPClientImpl client = new TCPClientImpl();
client.setupTest();
client.write(requestData.getBytes());
byte[] response = client.read();

线程组

JMeter线程组参数详解

JMeter线程组是性能测试的核心组件,用于模拟用户并发行为。以下是线程组的关键参数及其作用:

线程属性
  • 线程数(Number of Threads)

    设置虚拟用户数,即并发用户数量。例如设置为100表示模拟100个用户同时操作。

  • Ramp-Up时间(Ramp-Up Period)

    控制线程启动的时间间隔(秒)。若线程数为100,Ramp-Up为10,则每秒启动10个线程,逐步达到全量并发。

  • 循环次数(Loop Count)

    定义每个线程执行测试计划的次数。勾选"无限循环"可一直运行,需手动停止。

调度器配置
  • 启动延迟(Startup Delay)

    线程组启动前的等待时间(秒),用于延迟测试开始。

  • 持续时间(Duration)

    设置测试运行的总时长(秒),优先级高于循环次数。例如设置为300表示运行5分钟后自动停止。

  • 结束延迟(End Delay)

    测试结束后等待的时间(秒),用于处理未完成的请求。

其他配置
  • Same User on Each Iteration

    勾选后,每次迭代使用相同的用户变量(如Cookie),保持会话状态。

  • 延迟创建线程

    启用后,线程按需创建而非一次性初始化,减少资源占用。

线程组类型
  1. 普通线程组(Thread Group)

    基础并发模型,适用于大多数场景。

  2. Ultimate Thread Group

    通过插件实现复杂并发曲线,支持自定义线程增减策略。

  3. Stepping Thread Group

    分阶段增加并发用户数,适合负载渐变测试。

示例场景
  • 模拟瞬时高并发:线程数=500,Ramp-Up=0。
  • 阶梯加压测试:使用Stepping Thread Group,每30秒增加50线程。

合理配置线程组参数能更精准地模拟真实用户行为,确保测试结果的有效性。

查看结果树

JMeter查看结果树参数介绍

JMeter的查看结果树(View Results Tree)是一个监听器组件,用于可视化显示请求和响应的详细信息。以下是其主要参数和功能:

取样器结果(Sampler Result)
  • 线程名:显示执行请求的线程名称。
  • 样本开始时间:记录请求的启动时间戳。
  • 加载时间:请求从发送到接收完成的总耗时(毫秒)。
  • 连接时间:建立连接所花费的时间(毫秒)。
  • Latency:请求发送到接收到第一个响应字节的时间差。
  • 大小(Bytes):响应数据的字节数。
  • 响应头:显示服务器返回的HTTP头部信息。
  • 请求数据:显示发送的请求内容(如POST数据、URL参数等)。
响应数据(Response Data)
  • 格式选项:支持以文本、HTML、XML或JSON格式查看响应内容。
  • 渲染HTML:若响应为HTML,可勾选此选项直接渲染页面效果。
  • 编码设置:手动指定响应内容的字符编码(如UTF-8)。
配置选项(Configuration)
  • 仅日志错误:勾选后仅显示失败的请求日志。
  • 保存响应到文件:将响应数据保存到指定路径的文件中。
  • 显示主样本和子样本:若启用事务控制器,可选择显示主/子样本的详细信息。
高级设置(Advanced)
  • 持续时间断言:可配置断言规则,验证响应时间是否符合预期。
  • 正则表达式提取器:直接从响应中提取数据并存储为变量供后续使用。

注意事项

  • 性能测试时建议禁用查看结果树,因为记录详细数据会显著增加内存消耗。
  • 调试阶段可结合"仅日志错误"功能快速定位问题请求。
  • 对于大型响应数据,优先使用"保存到文件"避免JMeter界面卡顿。

示例:查看JSON响应

  1. 选择目标取样器,在结果树中切换格式为"JSON"。
  2. 展开JSON结构树,直接点击节点查看嵌套数据。
  3. 使用正则表达式提取器或JSON提取器获取特定字段值。

聚合报告

JMeter聚合报告主要参数

JMeter聚合报告(Aggregate Report)是性能测试结果分析的核心组件之一,提供以下关键指标:

样本数(Samples)

  • 表示测试期间执行的请求总数。例如100次HTTP请求对应样本数为100。

平均响应时间(Average)

  • 所有请求响应时间的算术平均值,单位为毫秒。计算公式为:
    Average = ∑ 响应时间 Samples \text{Average} = \frac{\sum \text{响应时间}}{\text{Samples}} Average=Samples∑响应时间

中位数(Median)

  • 将响应时间按大小排序后处于中间位置的值,反映50%用户的体验。

90%百分位(90% Line)

  • 90%请求的响应时间低于此值,用于评估大多数用户的体验。

最小/最大响应时间(Min/Max)

  • 最短和最长单次请求响应时间,帮助识别极端情况。

异常率(Error %)

  • 失败请求占总请求数的百分比。计算公式:
    KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: ...es}} \times 100

吞吐量(Throughput)

  • 单位时间内处理的请求数(请求/秒),计算公式:
    Throughput = Samples 总测试时间 \text{Throughput} = \frac{\text{Samples}}{\text{总测试时间}} Throughput=总测试时间Samples

接收/发送数据量(KB/sec)

  • 网络带宽使用情况的指标,反映数据传输效率。

关键参数解读方法

响应时间分析

  • 平均响应时间与90%百分位差距过大时,可能存在部分请求性能瓶颈。
  • 中位数若显著低于平均值,说明存在少量高延迟请求拉高整体数据。

异常率阈值

  • 通常要求≤1%,超过5%需重点排查服务端错误或测试脚本问题。

吞吐量优化

  • 与并发用户数、服务器资源消耗联动分析,寻找最优并发平衡点。

实际应用建议

性能基准测试

  • 通过对比不同版本的平均响应时间和吞吐量,验证优化效果。

容量规划

  • 结合90%百分位和吞吐量数据,预估系统在目标负载下的资源配置需求。

问题诊断

  • 高异常率时检查服务器日志;最大响应时间突增需排查网络或数据库瓶颈。

效果

相关推荐
测试界清流12 小时前
jmeter环境搭建
jmeter
qq_49244844612 小时前
Jmeter循环控制器,IF控制器,正则表达式
jmeter
张永清-老清12 小时前
每周读书与学习->JMeter主要元件详细介绍(一)配置元件
学习·jmeter·性能调优·jmeter性能测试·性能分析·干货分享
wdlnancy13 小时前
Jmeter 线程组、定时器、监听器、后置处理器常用配置说明
jmeter
清风~徐~来13 小时前
【软件测试】性能测试工具 JMeter
jmeter·性能测试
晚笛诶13 小时前
Jmeter分布式集群搭建与使用
jmeter
学无止境w1 天前
高并发系统性能测试:JMeter_Gatling 压测实战,测试场景设计与结果分析
jmeter
测试19982 天前
Jmeter是如何实现接口关联的?
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·接口测试
CesareCheung3 天前
QPS、TPS、RPS 详解
jmeter
qq_4924484463 天前
Jmeter跨线程组获取参数
jmeter