【软件测试】性能测试 —— 工具篇 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 性能测试工具我们都会用了吧~~)