当前位置: 首页 > news >正文

【软件测试】性能测试 —— 工具篇 JMeter 介绍与使用

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述

文章目录

  • 1. JMeter 的介绍
  • 2. JMeter 安装、配置、搭建
    • 2.1 前置条件 —— Java环境搭建
    • 2.2 JMeter 下载
    • 2.3 JMeter 安装
    • 2.4 JMeter 启动
  • 3. JMeter 基本使用
    • 3.1 前置知识
    • 3.2 JMeter 脚本编写
      • Step1:添加线程组
      • Step2:添加请求(HTTP请求)
      • Step3:添加查看结果树
      • Step4:添加用户自定义变量
      • Step5:添加断言
      • Step6:添加断言结果
      • Step7:添加聚合报告
    • 3.3 JMeter 执行性能测试
      • Step1:配置线程组
      • Step2:执行,观察聚合报告

前面内容介绍了 LoadRunner 性能测试工具,可回顾这期内容【软件测试】性能测试 —— 工具篇 LoadRunner 介绍与使用

JMeter、LoadRunner 都是目前非常好用的性能测试工具,也很主流,并没有什么好坏之分,因为 JMeter 开源(免费~),同时使用频率比较高,因此我们一起来看看如何使用 JMeter 吧~

1. JMeter 的介绍

介绍】JMeter 是一款开源的负载测试工具,主要用于模拟各种负载场景,测试软件、系统或网络的性能、可靠性和稳定性

核心功能

  • 负载测试与压力测试
    1)模拟大量用户并发访问,测试系统在不同负载下的响应时间、吞吐量等性能指标
    2)支持逐步增加用户数(阶梯式负载)或瞬间高并发(峰值负载),验证系统极限承载能力
  • 多协议支持
    1)主流协议:HTTP/HTTPS、JDBC(数据库)、WebSocket 等
    2)扩展协议:通过插件支持 gRPC、Dubbo 等,满足多样化测试需求
  • 测试场景设计
    1)可创建复杂的用户行为流程,通过"线程组"、“取样器”、“逻辑控制器” 等组件模拟真实业务场景
    2)支持参数化(如动态生成用户账号、随机数据),增强测试的真实性
  • 结果分析与可视化
    1)生成图表,如响应时间曲线图、吞吐量柱状图等,可以直观展示性能瓶颈
    2)支持将结果导出为 CSV、XML 或 HTML,便于二次分析

适用场景

  • Web 应用测试:验证网站在高并发下的响应速度和稳定性
  • API 接口测试:测试 RESTful API、SOAP 接口的性能和容错能力
  • 数据库测试:模拟大量 SQL 查询,评估数据库性能
  • 分布式系统测试:测试多节点集群的负载均衡和协同能力

JMeter 最大的优势就是开源免费还好用(白嫖谁不喜欢呢~嘿嘿),并且通过插件机制支持更多协议,图形化界面也是十分友好的,可以通过拖拽式操作简化测试计划设计!

基本组件

  • 线程组模拟用户群体,设置并发数、循环次数等
    • 线程数:模拟用户数量
    • Ramp-Up 时间:达到指定线程所需要的时间,比如设置线程数为500,Ramp-Up时间为10s,则每秒启动50个线程
    • 循环次数:测试的循环次数
  • 取样器发送请求(如 HTTP 请求、JDBC 查询),获取服务器响应
    • 用于向服务器发送请求,如HTTP/HTTPS请求、JDBC查询等
    • 在线程组下添加取样器,配置请求的URL、方法、参数等内容
  • 监听器收集并展示测试结果(如表格、图表、聚合报告)
  • 断言验证响应结果是否符合预期(如状态码 200、响应包含特定字符串)
    • 用于验证响应是否符合预期,可以使用正则表达式、Xpath等方式进行断言
  • 配置元件设置全局参数(如 HTTP 头信息、数据库连接池)
  • 前置处理器、后置处理器:在单个取样器执行前/后触发
    • 前置处理器,在单个取样器执行前触发,对取样器进行预处理,如生成随机参数替换请求中的变量,从文件读取数据并传入请求,修改取样器的请求内容
    • 后置处理器 在单个取样器执行后触发,处理取样器的响应结果,如从响应中提取关键数据(如 token、ID),对响应结果进行格式化或转换,将提取的数据保存为变量供后续取样器使用
  • 逻辑控制器控制请求执行顺序(如 if 条件判断、循环、事务)
    • 用于控制测试的执行逻辑,如if条件判断、循环等

2. JMeter 安装、配置、搭建

2.1 前置条件 —— Java环境搭建

我们知道 JMeter 是基于 Java 语言开发的~ 因此,我们使用 JMeter 需要安装 JDK~~

(这里不再赘述 JDK 下载和 Java 环境变量的配置~ 目前 JMeter 是 5+ 的版本,需要 JDK 8 以及以上的版本,一般安装 JDK 8 即可)

2.2 JMeter 下载

JMeter 官方下载地址:JMeter 官方下载

在这里插入图片描述

2.3 JMeter 安装

  • Step1根据自己的系统,选择对应的进行下载,下载安装包后解压(记住在哪个位置哦,后面环境变量需要用)
    在这里插入图片描述
    在这里插入图片描述
    (笔者安装在了这里~)
  • Step2对环境变量进行配置
    1)添加变量
    复制 JMeter 下载后的路径~ 在环境变量中配置:
    变量名JMETER_HOME,变量值为下载 JMeter 的路径
    在这里插入图片描述
    记得一步步点确定,避免没有添加进去,忘记环境变量如何配的,可以直接搜索高级系统设置~)
    2)Path添加
    在 Path 里面 添加 %JMETER_HOME%\bin
    在这里插入图片描述
  • Step3检查是否下载安装配置成功
    1)检查 JMeter 版本:jmeter -v
    在这里插入图片描述
    2)检查 JMeter 是否能启动:jmeter
    在这里插入图片描述
    (如果没有出现,可以检查上述环境变量是否添加成功!!!如果都配置保存成功了,还是没有出现,可以将在用户变量里面Path添加%JMETER_HOME%\bin

2.4 JMeter 启动

JMeter 启动方式有两种:
1)上述在 cmd 中输入 :jmeter 则启动了

在这里插入图片描述

2)进入apache-jmeter-5.6.3,打开里面的 bin 文件,找到 ApacheJMeter.jar,双击

在这里插入图片描述

启动后页面如下:

在这里插入图片描述

3. JMeter 基本使用

3.1 前置知识

1)可以更换语言,选择我们更熟悉的中文(简体):Options ——> Choose Langauge ——> Chinese(Simplified)

在这里插入图片描述
2)页面按钮功能介绍:

在这里插入图片描述

3.2 JMeter 脚本编写

本期内容以百度网站https://www.baidu.com/为例子,进行简单的脚本编写,也可以拿其它网站或者是自己的项目试试~

Step1:添加线程组

右键测试计划,点击添加 ——> 线程(用户) ——> 线程组

在这里插入图片描述
线程组可以配置如下内容:

在这里插入图片描述
具体解释

  • 名称:给这个线程组取的名称,以便区分
  • 注释:对名称的补充说明
  • 在取样器错误后要执行的动作:可以很清楚的看到给出的选项,根据自己需要选择取样器(用于发送请求,获取服务器响应)错误后是继续、启动下一进程循环、停止线程、停止测试还是立即停止测试
  • 线程属性
    • 线程数:模拟用户数,设置10个线程数则是模拟10个线程数
    • Ramp-up时间(秒):达到指定线程所需要的时间,设置10个线程数,Ramp-up为2s,则1s启动5个线程
    • 循环次数:每个线程发送的请求次数,设置10个线程,10次循环次数,每个线程都发送10个请求,总共发送 10 * 10 = 100个请求
  • Same user on each iteration:在循环执行任务、重复处理流程中,保持"同一用户"的上下文、状态或身份信息一致,如保存用户会话、权限信息、历史操作记录
  • 延迟创建线程直到需要:线程不预先创建,在任务实际需要执行时才动态创建线程(有没有想到"懒加载"~)
  • 调度器:用于控制线程执行时机,何时启动,持续多久(需要注意的是勾选了调度器,需要勾选循环次数为永远)
    • 持续时间(秒):测试持续的时间
    • 启动延迟(秒):测试延迟的启动时间

在这里插入图片描述

Step2:添加请求(HTTP请求)

右键线程组 ——> 添加 ——> 取样器 ——> HTTP请求(根据自己需要来)

在这里插入图片描述

HTTP请求可以配置如下内容:

在这里插入图片描述

具体解释

  • 名称:给这个HTTP请求取的名称,以便区分
  • 注释:对名称的补充说明
  • Web服务器
    • 协议:向目标服务器发送请求的协议,可以是HTTP/HTTPS,默认是HTTP
    • 服务器名称或IP:发送目标服务器的名称或者IP
    • 端口号:目标服务器端口号,默认值为80(因为HTTP默认端口号为80)
  • HTTP请求
    • 方法:发送HTTP请求的方法,最常用的有 GET、POST 等等
    • 路径:目标URL地址(即URL后面去掉服务器地址后的剩余部分)
    • 内容编码:编码方式,这里配置为常用的utf-8,默认为ISO-8859-1编码
  • 同请求一起发送的参数:URL中的参数(下图棕色框框部分,注意参数传入中文的时候,需要勾选"编码"

在这里插入图片描述
在这里插入图片描述

Step3:添加查看结果树

查看结果树查看和分析 HTTP 请求的响应结果(简单地进行分析)

右键点击线程组 ——> 添加 ——> 监听器 ——> 查看结果树

在这里插入图片描述
接着运行,将响应数据格式改成:HTML_Source Formatted 可以查看结果~ 如下:

可以看到是按照我们的配置发送的请求,向百度搜索"哈哈哈哈哈",发送的请求是正确的

在这里插入图片描述
取样器结果:

在这里插入图片描述

Step4:添加用户自定义变量

用户自定义变量】添加用户自定义变量是为了方便存储和管理需要的值,用户自定义变量是全局的,可以在测试计划中任何地方引用,避免重复写

右键点击线程组 ——> 添加 ——> 配置元件 ——> 用户定义的变量

在这里插入图片描述
我们可以将 wd 的变量存储起来,wd 参数是用于存搜索词语的

1)添加变量

在这里插入图片描述
2)使用变量:使用 ${变量名称}

在这里插入图片描述

Step5:添加断言

断言】验证测试结果是否符合预期

右键点击线程组 ——> 添加 ——> 断言 ——> 响应断言

在这里插入图片描述
在这里插入图片描述

Step6:添加断言结果

添加断言结果,我们可以看到 HTTP 请求中的断言结果是否正确

右键点击HTTP请求 ——> 添加 ——> 监听器 ——> 断言结果

在这里插入图片描述
点击运行,可以看到运行结果如下:

在这里插入图片描述

Step7:添加聚合报告

聚合报告】汇总和分析测试结果工具,提供了各种性能指标如请求数、平均响应时间、吞吐量等,来存储性能测试报告的~

右键点击线程组 ——> 添加 ——> 监听器 ——> 聚合报告

在这里插入图片描述

在这里插入图片描述

具体解释

  • Label: 测试中 HTTP 请求的"自定义名称"
  • #样本:请求数,实际执行的请求数量,发了多少次请求,比如这里是 10 * 10 = 100
  • 平均值:平均响应时间(默认是单个请求的平均响应时间)
  • 中位数:50%用户的响应时间
  • 90%百分位:90%用户的响应时间
  • 95%百分位:95%用户的响应时间
  • 99%百分位:99%用户的响应时间
  • 最小值:所有请求中最快的响应时间,最小响应时间
  • 最大值:所有请求中最慢的响应时间,最大响应时间
  • 异常%:请求错误率(请求错误数/请求总数)
  • 吞吐量:单位时间处理的请求数(默认是每秒完成的请求数)
  • 接收KB/sec:每秒从服务器接收的数据量(响应数据大小)
  • 发送KB/sec:每秒向服务器发送的数据量(请求数据大小)

3.3 JMeter 执行性能测试

Step1:配置线程组

在这里插入图片描述

Step2:执行,观察聚合报告

在这里插入图片描述
【】

分析测试结果,不断调整测试计划,发现问题~

(如果想重新执行,可以点击清除按钮~)

笔者在这里请求频率过高,触发了安全验证流程(看到这个不用慌~)

在这里插入图片描述

小建议:

  • 精简监听器:测试期间,若无需实时查看结果,可关闭非必要监听器,降低系统资源消耗,保障测试高效运行
  • 按需用断言:断言并非越多越好,过量断言会增加测试复杂度,结合实际测试需求,精准使用断言,聚焦核心验证点
  • 迭代调计划:测试流程中,需动态优化测试计划,通过灵活调整线程数、循环次数等参数,不断逼近最佳测试效果,适配系统性能验证需求
  • 深析结果数据:借聚合报告等专业分析工具,对测试结果开展深度剖析。从数据中挖掘潜在性能问题,为系统优化提供精准依据 。

✨✨✨本期内容到此结束啦~ (想必 JMeter、LoadRunner 性能测试工具我们都会用了吧~~)

http://www.lryc.cn/news/615951.html

相关文章:

  • 联合理解生成的关键拼图?腾讯发布X-Omni:强化学习让离散自回归生成方法重焕生机,轻松渲染长文本图像
  • 如何部署图床系统 完整教程
  • ESP32安装于配置
  • Oracle 19C 查看卡慢的解决思路
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月10日第159弹
  • Spring Boot 注解详解:@RequestMapping 的多种用法
  • 第4章 程序段的反复执行4 多重循环练习(题及答案)
  • RAGFlow 拉取 Docker 镜像失败
  • 压力测试等工具源码包编译及使用方法
  • 基于python高校固定资产管理系统
  • 【银行测试】保险项目测试点+测试流程详情(二)
  • scanpy单细胞转录组python教程(一):不同形式数据读取
  • java报错“ NoSuchMethodError:com.test.Service.doRoomList(Ljava/lang/String;)V解决方案
  • Gin 框架错误处理机制详解
  • 线性代数1000题学习笔记
  • 如何将PDF文档进行高效编辑处理!
  • NLP学习开始-02逻辑回归
  • 【Spring IoC 核心实现类详解:DefaultListableBeanFactory】
  • 从策略梯度到 PPO
  • Linux权限管理终极指南(用户身份与文件权限
  • Python中的 __name__
  • 计算机视觉(CV)——pytorch张量基本使用
  • imx6ull-驱动开发篇17——linux原子操作实验
  • docker等基础工具使用
  • 个人笔记Mybatis2
  • 第一章 概述
  • 快速了解DBSCAN算法
  • reinterpret_cast and static cast
  • Docker实战:为项目打造即开即用的宝塔LNMP环境
  • redis集群-docker环境