测试9:性能测试--工具篇(JMeter)

1.部署JMeter

1.1 安装JMeter

下载 tar包,解压即可。

1.2 启动JMeter

方式一:点击bat文件

关闭jmeter,点击任意一个❌️即可。


方式二:命令行启动(推荐)

step1:添加JMeter系统环境变量

最后点击确定保存设置

step2:打开命令行工具, 输入命令jmeter即可启动JMeter工具。


1.3 基础配置

修改字体为中文

修改后需要保存重启jmeter中文就会生效。


了解一下F12工具




2.基本使用流程

此处对自己的项目**即时通讯(网页聊天室)**进行性能测试

http://122.51.160.88:8080/login.html

2.1 启动JMeter

可以先把字体放大一点,也可以修改外观,改改界面颜色。

2.2 测试计划→线程→线程组

添加相关配置

2.3 线程组→取样器→HTTP请求

添加相关配置,以登录页面举例。

2.4 线程组监听器查看结果树

(用来查看接口请求的结果

2.5 点击启动按钮运行

(查看接口测试结果

先把循环次数改为1 次,关闭调度器

点击启动

启动前需要先保存测试计划,点击Yes,命名并保存到自己所需路径,点击Save。

2.6 查看结果树


若修改请求参数,需要重新启动

若想修改参数,也可以先清除历史请求 ,修改端口号为9090 后,重新启动

发现请求失败 ,测试完将端口号改回8080。

3.元件作用域和执行顺序

作用域元件 放在哪个节点下,就对 下面的所有 子孙节点生效。【由测试计划 树形结构中的父子关系决定】
执行顺序配置 → 前置处理 → 取样器 → 后置处理 → 断言 → 监听器 ,取样器功能独立但执行顺序固定。

4.重点组件介绍

4.1 线程组(测试计划-线程)

控制 JMeter将用于执行测试的线程(并发 用户**)** 数,设置发送的请求次数

请求次数 = 线程数 × 循环次数 × 取样器数量


4.2 HTTP请求(取样器)

通过 HTTP 请求取样器 创建针对页面或 APIHTTP 请求。


4.3 查看结果树(监听器

用于查看每个取样器(请求)详细执行信息 ,主要包括取样器结果、请求、响应数据三部分。

取样器结果 :用于展示和统计 单个请求详细信息


4.4 HTTP请求默认值(配置元件)

同一个系统 中,所有接口协议、IP、端口号、编码 基本都是相同的,路径、请求参数、请求头 会有所不同

相同 的内容单独抽取 出来,存放HTTP 请求默认值 中,这样所有接口 就可以使用同一套请求配置。


此时就可以将其他接口 中的协议、IP、端口号、编码 去掉了


修改参数后,也可以清除历史请求重新启动,查看结果。

:JMeter 中配置的优先级规则 是:取样器 (HTTP 请求)中的设置会覆盖 配置元件 (HTTP 请求默认值)中的同名配置。


4.5 HTTP Cookie管理器(配置元件)

默认 是在线程组下面的所有接口生效


正常调用登录接口 ,服务器响应 中的 Set-Cookie 会被HTTP Cookie 管理器自动捕获并存储

后续所有业务接口 (如获取会话列表、发送消息等)的请求 中,Cookie 管理器会自动 将 Cookie 放入请求头,从而实现鉴权。


默认无需配置 ,但遇到多用户、跨域、固定 Cookie、策略不符等场景时,需要手动调整 Cookie 管理器的设置。


若使用Postman,推荐开启自动管理 Cookie (Settings → Automatically manage cookies),发送登录请求 后,Postman 会自动保存返回的 Cookie**;** 也可手动从浏览器 F12 的登录接口的响应头Response Headers )中复制 Set-Cookie 字段里的JSESSIONID=xxx, 或者 也可以从任意一个业务请求的请求头中拿Cookie。

登录接口:指一个完整的 API 端点,包含请求和响应】

开启自动 管理后,后续请求会自动携带该 Cookie****凭证访问业务接口,无需手动设置**;** 若采用手动 调试,则需在后续请求的Headers 中添加 `Cookie: JSESSIONID=xxx` 字段。

注意:① 在使用自动管理 Cookie时,需确保登录接口的响应头包含 Set-Cookie字段 ,Postman 会自动 处理,无需手动编写脚本。

②手动 从浏览器复制 Cookie 的方式是静态的,仅适用于临时调试,一旦会话过期重新复制 ,不推荐用于持续集成或自动化测试;自动化测试务必开启自动管理 Cookie


4.6****HTTP信息头管理(配置元件)

此处借用博客 系统进行演示

(1) 先调用登录接口,从它的响应数据中提取出最的 user_token_heade。

(2) 通过HTTP 信息头管理器 将获取到的登录凭证(如 token)设置到请求头字段 `user_token_header` 中,后续所有需要 鉴权的业务接口 即可自动携带该凭证进行访问。


默认 是在线程组下面的所有接口 生效,如果我们想让他在列表页接口 中生效,只需要拖拽进去即可。


①若使用 Postman ,推荐通过登录接口 的 Tests 脚本动态提取 token 并设为环境变量

(如 user_token_header);也可手动从浏览器F12 登录接口的响应体Response Body )中复制 data 字段里的 token 值,或者 也可以 任意一个业务请求的请求头中拿 token。

登录接口:指一个完整的 API 端点,包含请求和响应】

②然后在后续接口的 Headers 中添加 user_token_header: {{user_token_header}},即可携带凭证访问业务接口

注意: ①在使用 Tests 脚本动态提取 token 时,需确保登录接口的响应体包含 token 字段,且脚本正确解析并赋值给环境变量。

②手动从浏览器 F12 复制 token 的方式是静态的,仅适用于 token 长期不变临时调试 ;一旦 token 过期,仍需重新 复制;自动化测试****务必采用 动态提取


4.7 JSON提取器(登录接口-后置处理器)

此处仍然 借用博客 系统进行演示

(1)登录接口 中添加JSON提取器


(2)调用登录接口 ,获取它的响应数据


(3) 怎么从响应数据**(** JSON****格式 提取data字段呢?

先了解一下JSON操作符

参考文档:https://github.com/json-path/JsonPath

可以对JSON路径 进行验证

举例:


(4)添加JSON配置


(5)HTTP信息头管理中配置JSON提取的参数


4.8 JSON断言(xx接口-断言)

取样器中添加 JSON 断言 ,可自动校验响应数据是否符合预期 ,从而实现对接口的自动化测试

此处仍然 借用博客 系统进行演示

(1)针对某个HTTP请求接口(取样器) 添加JSON断言

只作用于登录接口


(2) 添加JSON配置

清除历史请求重新启动


4.9 用户定义的变量(配置元件)

用于定义一组静态、可重复使用的常量 (如 IP、端口、账号),供整个测试计划中的元件引用 ,实现一处 修改、处处生效,从而提高脚本的可维护性。

引用语法:${变量名} 区分大小写

此处仍然 借用博客 系统进行演示

测试计划 中有多个接口 (如多个详情页 接口)需要用到同一个参数 (如 blog id)时,如果直接在每个接口中写死,后续修改时就需要逐个更改,非常繁琐。

使用用户定义的变量 可以只在一个地方定义 ,所有引用 的地方自动生效,实现"一处修改,处处生效"。




4.10 CSV数据文件设置(配置元件)

可以模拟用户真实行为

登陆接口 为例,对登录接口进行性能测试 时,不能仅使用固定 的用户名和密码。应准备 多组不同 的用户名和密码,以实现****真实场景中多用户****同时登录场景,从而更贴近实际使用情况。

【CSV是一种纯文本格式,用于存储表格数据】

操作步骤:

(1)编写test.csv 文件,可以在**.jmx同级目录**下创建。

(2)CSV数据文件设置

(3) 修改登陆接口 及其他涉及到username和password获取的参数

修改完该配置后,登陆接口 发起请求时将从csv文件中获取配置好的username和password参数,获取顺序为从上往下依次获取。

(4) 修改线程组中线程数 ,使得每次取到的username和password都不一样

(5)清除历史记录,重新运行。


4.11 同步定时器(定时器)

模拟多用户并发访问 的场景,确保多个线程 能够同时****执行某个操作 ,达到真正的并发效果。

【较 真实模拟多个用户同时进行操作以度量服务器的处理能力】


未添加 同步定时器,重新运行,查看日志 结果,发现三个线程并不是同时 发起请求的(暂时禁用了除登录以外的接口)


添加同步定时器 ,重新运行,再次查看日志 结果,发现三个线程是同时 发起请求的,达到了真正的并发效果。


4.12 事务控制器(逻辑控制器)


4.13 聚合报告(监听器)

可以看到性能测试 过程中整体的数据变化


4.14 Jmeter插件

下载Jmeter插件管理工具https://jmeter-plugins.org/install/Install/


将下载好的文件放到 jmeterlib/ext 文件夹下,并重启JMeter


jmeter界面右上角将会有一个小蝴蝶 ,该工具即jmeter插件管理工具点击后 可以下载jmeter中支持的各种插件


真实企业压测场景 中,我们通常是一点一点的逐步增加线程数,因此需要安装新的插件来支持线程数的配置。

通过插件管理工具(蝴蝶)下载其他监听器、线程组插件

先选中 所需插件,再点击右下角 ,等待下载完成,并重启JMeter。


下载完可以在 测试计划-线程中看到新增的元件​​​


4.15 Stepping Thread Group(测试计划-线程)

梯度压测****线程组 的主要作用是模拟负载逐步增加的过程 ,用于观察系统在不同压力阶段下的性能表现。



4.16 Response Times Over Time(监听器)

主要用于观察并分析响应时间实时平均值及其整体变化趋势, 可以更直观地了解系统在不同时间点响应性能,从而发现潜在的性能问题或瓶颈。

横坐标:运行 时间,纵坐标:响应时间(单位:毫秒)

测试人员可根据趋势线 判断响应时间的稳定性 及是否存在大幅波动

例如,若响应时间 在某时间点突然增加 ,可能意味着系统在该时刻遇到了性能问题


4.17 Transactions per Second-TPS(监听器)

吞吐量单位时间 内处理的并发数 ,反映系统的负载承受能力,常用**TPS(每秒处理事务数)**衡量。

TPS = 总的请求成功的事务数 / 总运行时间

横坐标:运行 时间,纵坐标:TPS 值

观察 TPS 随时间的变化 趋势,红色:通过 的 TPS,绿色:失败的 TPS



5.测试报告

JMeter 测试报告是一个全面而详细 的文档,提供测试执行结果的详细信息 ,帮助用户评估系统性能 并进行优化

生成性能测试报告的命令如下:

注意:日志文件目录 可以不存在,若为已经存在 的情况下需要保证内容为空 ,否则会出现错误


jmeter -n -t 即时通讯性能测试计划.jmx**-l** test.jtl**-e -o**./reports/.

双击 index.html 文件,查看性能测试报告

6.性能分析

通过三大指标分析性能问题

(1)**吞吐量:吞吐量越大**性能越好,其变化规律可反映系统稳定性及是否达到瓶颈

(2)响应时间超标 说明系统出现瓶颈 ,需关注达到超标时 的线程数,且也可能因系统不稳定并发压力 增大而变

(3)****错误率(可靠性):高并发下需保证极低错误率,错误率高可能源于 接口请求失败、服务器瓶颈、限流/熔断/降级策略。

相关推荐
查拉图斯特拉面条20 小时前
JMeter脚本中断排查:CSV配置导致线程提前终止
jmeter
lifewange4 天前
JMeter InfluxDB 后端监听器 全参数详解
jmeter
川石课堂软件测试5 天前
技术分享|JMeter接口与性能测试实战
数据库·功能测试·测试工具·jmeter·单元测试·postman·prometheus
弹简特5 天前
【精通JMeter接口测试】03-JMeter 接口测试持续集成踩坑记:jtl 转 Allure 报告、Jenkins 定时执行、CSP 样式劫持全解决
jmeter·自动化·jenkins
晨+燕5 天前
JMeter中如何定位到某个具体的类来自于哪个jar包
python·jmeter·jar
_周游6 天前
【软件测试】使用JMeter进行压力测试_2
jmeter·压力测试
你这个想法好8 天前
深度解析 JMeter 性能测试:从插件安装到,“阶梯线程组”下,“仅一次控制器”失效的解决方案
jmeter
_周游8 天前
【软件测试】使用JMeter进行压力测试_1
测试工具·jmeter·压力测试
U盘失踪了9 天前
JMeter 线程组
jmeter