JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)

JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)

一、项目背景

在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以进行有效的压测。

二、JMeter 自带工具脚本录制流程

第一步:增加录制组件

打开 JMeter,在测试计划中右键点击,选择“添加” -> “非测试元件” -> “HTTP(S) Test Script Recorder”。这一组件是实现脚本录制的核心,它将作为代理服务器来捕获浏览器发送的请求。

第二步:设置代理(把 JMeter 作为代理)

  1. 获取 JMeter 所在机器的 IP 地址。在命令提示符中输入 ipconfig 命令,得到当前机器的 IP 地址,假设为 192.168.0.17
  2. 打开“控制面板”,找到“Internet 选项”。
  3. 在“Internet 选项”窗口中,切换到“连接”选项卡。
  4. 点击“局域网设置”按钮,在弹出的“局域网 (LAN) 设置”窗口中,勾选“为 LAN 使用代理服务器”,并在“地址”栏中输入 JMeter 所在机器的 IP 地址 192.168.0.17,在“端口”栏中输入 JMeter 代理服务器将要使用的端口号(后续在 JMeter 中配置)。

第三步:配置 JMeter 的代理服务器

  1. 回到 JMeter 的“HTTP(S) Test Script Recorder”界面。
  2. 在“端口”字段中设置一个未被占用的端口号,例如 8888
  3. 在“目标控制器”中选择一个线程组,录制的脚本将被添加到该线程组中。可以先创建一个新的线程组,例如命名为“录制线程组”。
  4. 可以根据需要配置“排除模式”,用于排除一些不需要录制的请求,如静态资源(图片、CSS、JavaScript 文件等)的请求。常见的排除模式可以是 .*\.(jpg|jpeg|png|gif|css|js)

第四步:启动服务并且访问项目进行录制

  1. 在“HTTP(S) Test Script Recorder”界面点击“Start”按钮,启动 JMeter 代理服务器。
  2. 打开浏览器,访问要测试的项目。在浏览器中进行各种操作,如登录、浏览页面、提交表单等,JMeter 会自动捕获这些操作产生的请求,并将其添加到选择的线程组中。

三、使用 BadBoy 录制脚本流程

第一步:安装和启动 BadBoy

从官方渠道下载 link并安装 BadBoy 工具。安装完成后,启动 BadBoy。

第二步:开始录制

  1. 在 BadBoy 的地址栏中输入要测试项目的 URL,然后按回车键访问该网站。
  2. 点击 BadBoy 界面上的“Record”按钮,开始录制操作。
  3. 在浏览器窗口中进行各种操作,如点击链接、填写表单、提交数据等。BadBoy 会实时记录每一个操作步骤。

第三步:停止录制并保存脚本

  1. 完成所有需要录制的操作后,点击 BadBoy 界面上的“Stop”按钮,停止录制。
  2. 点击“File” -> “Save As”,将录制的脚本保存为 .bbb 格式的文件。

第四步:将 BadBoy 脚本导入 JMeter

  1. 打开 JMeter,在测试计划中右键点击,选择“添加” -> “非测试元件” -> “BadBoy 录制的脚本导入器”。
  2. 在“BadBoy 录制的脚本导入器”界面中,点击“浏览”按钮,选择之前保存的 .bbb 格式的文件。
  3. 点击“导入”按钮,BadBoy 录制的脚本将被导入到 JMeter 中。

四、完善脚本

1. 调试接口直到完成

无论是使用 JMeter 自带工具还是 BadBoy 录制的脚本,录制完成后都需要检查线程组中的请求,删除一些不必要的请求(如之前排除模式未过滤掉的静态资源请求)。对每个请求进行调试,确保请求的参数、请求方法等设置正确。可以通过“查看结果树”监听器查看每个请求的详细信息,包括请求的 URL、请求头、请求参数和响应内容等。

2. 接口关联:正则,JSONPath

  • 正则表达式提取器:如果前一个接口的响应中包含后一个接口需要使用的数据,可以使用正则表达式提取器进行关联。例如,前一个接口的响应内容为 {"token": "abc123"},要提取 token 的值,可以在该接口下添加“后置处理器” -> “正则表达式提取器”,在“引用名称”中填写 token,“正则表达式”填写 "token": "([^"]+)",“模板”填写 $1$,“匹配数字”填写 1
  • JSONPath 提取器:对于 JSON 格式的响应,使用 JSONPath 提取器更为方便。例如,要提取上述 JSON 响应中的 token 值,可以在该接口下添加“后置处理器” -> “JSON 提取器”,在“名称”中填写 token,“JSON 路径表达式”填写 $.token,“匹配数字”填写 1。在后续接口中,使用 ${token} 来引用提取的值。

3. 用【用户定义的变量】或【HTTP 请求默认值】提取 IP 或端口

  • 用户定义的变量:在测试计划中添加“配置元件” -> “用户定义的变量”,在“名称”列中填写 server_ipserver_port,在“值”列中分别填写服务器的 IP 地址和端口号。在后续的 HTTP 请求中,使用 ${server_ip}${server_port} 来引用这些值。
  • HTTP 请求默认值:在测试计划或线程组中添加“配置元件” -> “HTTP 请求默认值”,在“服务器名称或 IP”字段中填写服务器的 IP 地址,在“端口号”字段中填写端口号。这样,后续的 HTTP 请求将默认使用这些值。

4. 需要对登录做 CSV 参数化处理:可以用少量的用户

  • 创建一个 CSV 文件,例如 users.csv,内容格式如下:
username,password
user1,pass1
user2,pass2
user3,pass3
  • 在登录接口所在的线程组中添加“配置元件” -> “CSV 数据文件设置”。
  • 在“CSV 数据文件设置”界面中,“文件名”填写 users.csv,“文件编码”选择合适的编码(如 UTF-8),“变量名称”填写 username,password
  • 在登录接口的请求参数中,使用 ${username}${password} 来引用 CSV 文件中的数据。

5. 加聚合报告或者其他的报告

在测试计划中添加“监听器” -> “聚合报告”,它可以统计每个请求的响应时间、吞吐量、错误率等信息。还可以根据需要添加其他监听器,如“图形结果”、“汇总报告”等,以更直观地展示测试结果。

6. 增加【事务控制器】(注意打勾),【仅一次控制器】,有可能要加【吞吐量控制器】

  • 事务控制器:在需要统计一组请求的总响应时间和吞吐量的地方添加“逻辑控制器” -> “事务控制器”,勾选“生成父样本”。例如,将登录和进入主页的请求放在一个事务控制器中,用于统计整个登录流程的性能指标。
  • 仅一次控制器:在需要某个请求只执行一次的地方添加“逻辑控制器” -> “仅一次控制器”。例如,登录请求通常只需要执行一次,将登录请求放在仅一次控制器中。
  • 吞吐量控制器:如果需要控制某个请求或一组请求的执行频率,可以添加“逻辑控制器” -> “吞吐量控制器”。设置“目标吞吐量”和“计算模式”,以实现对吞吐量的精确控制。

五、增加断言

为了确保接口的响应符合预期,需要添加断言。例如,在登录接口中添加“响应断言”,设置“要测试的响应字段”为“响应文本”,“模式匹配规则”为“包含”,“测试模式”为“登录成功”。这样,当登录接口的响应文本包含“登录成功”时,断言通过;否则,断言失败。

六、开始做压测:并发

为了模拟大量用户同时访问系统的情况,需要设置并发用户数。可以使用“同步定时器”来实现并发。

  1. 在需要并发执行的请求所在的线程组中添加“定时器” -> “同步定时器”。
  2. 在“同步定时器”界面中,设置“集合点数量”为要并发的用户数,例如 100。当达到指定数量的线程到达集合点时,这些线程将同时释放,模拟并发访问。
  3. 调整线程组的“线程数”、“循环次数”和“Ramp - Up Period(秒)”等参数,以控制测试的规模和持续时间。例如,设置“线程数”为 100,“循环次数”为 10,“Ramp - Up Period(秒)”为 10,表示在 10 秒内启动 100 个线程,每个线程循环执行 10 次请求。

通过以上步骤,可以完成一个完整的使用 JMeter 自带工具和 BadBoy 进行脚本录制、完善和压测的过程,对项目的性能和功能进行有效的测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982162.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过计费集成和警报监控 Elasticsearch Service 成本

作者:来自 Elastic Alexis Charveriat 使用 Elasticsearch 服务计费集成来跟踪、定制和提醒 Elasticsearch 服务费用。 监控和管理你的Elasticsearch服务(ESS)使用情况和成本对高效运营至关重要。 Elasticsearch服务计费集成提供了一种简化的…

cmake、CMakeLists.txt、make、ninja

文章目录 一、概念0.cmake官网1.什么是cmake2.为什么使用cmake3.CMakeLists.txt 二、CMakeLists.txt语法:如何编写CMakeLists.txt,语法详解(0)语法基本原则(1)project关键字(2)set关键字(3)message关键字(4)add_executable关键字(5)add_subdirectory关键…

DeepSeek本地接口调用(Ollama)

前言 上篇博文,我们通过Ollama搭建了本地的DeepSeek模型,本文主要是方便开发人员,如何通过代码或工具,通过API接口调用本地deepSeek模型 前文:DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注:本文不仅…

前端基础之浏览器本地存储

如我们在一些网站中&#xff0c;去进行数据搜索&#xff0c;在浏览器中是有一个对于的存储的&#xff0c;并且我们可以去手动进行value的增删操作 LocalStroage的使用 并且将浏览器关闭之后&#xff0c;数据也会保存&#xff0c;除非用户手动清理数据或是清空缓存 <!DOCTYPE…

2025 聚合易支付完整版PHP网站源码

源码介绍 2025 聚合易支付完整版PHP网站源码 PHP版本&#xff1a;PHP74 源码上传服务器&#xff0c;解压访问域名即可安装 安装完成后一定要设置伪静态 源码里面nginx.txt 就是伪静态 然后复制粘贴到伪静态里面保存即可 部分截图 源码获取 2025 聚合易支付完整版PHP网站源码…

Spring Boot 3 整合 MinIO 实现分布式文件存储

引言 文件存储已成为一个做任何应用都不可回避的需求。传统的单机文件存储方案在面对大规模数据和高并发访问时往往力不从心&#xff0c;而分布式文件存储系统则提供了更好的解决方案。本篇文章我将基于Spring Boot 3 为大家讲解如何基于MinIO来实现分布式文件存储。 分布式存…

easyExcel使用案例有代码

easyExcel 入门,完成web的excel文件创建和导出 easyExcel官网 EasyExcel 的主要特点如下&#xff1a; 1、高性能&#xff1a;EasyExcel 采用了异步导入导出的方式&#xff0c;并且底层使用 NIO 技术实现&#xff0c;使得其在导入导出大数据量时的性能非常高效。 2、易于使…

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量&#xff08;个&#xff09;&#xff1a;决定了 GPU 并行处理能力&#xff0c;在 AI 等并行计算类业务下&#xff0c;CUDA 核心越多性能越好。 显存容量&#xff08;GB&#xff09;&#xff1a;决定了 GPU 加载数据量的大小&#xff0c;在 AI…

FFMPEG利用H264+AAC合成TS文件

本次的DEMO是利用FFMPEG框架把H264文件和AAC文件合并成一个TS文件。这个DEMO很重要&#xff0c;因为在后面的推流项目中用到了这方面的技术。所以&#xff0c;大家最好把这个项目好好了解。 下面这个是流程图 从这个图我们能看出来&#xff0c;在main函数中我们主要做了这几步&…

获取Kernel32基地址

暴力搜索 32位在4G内存搜索有一定可行性&#xff0c;但是处理起来其实还是比较麻烦的&#xff0c;因为内存不可读会触发异常&#xff0c;需要对这些异常问题进行处理。 优化思路:缩小范围、增大搜索步长 (1)不优化&#xff0c;原始内存特征匹配&#xff0c;容易出错&#xf…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 与 JSP 的协作:MVC 模式的雏形

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Servl…

如何在Github上面上传本地文件夹

前言 直接在GitHub网址上面上传文件夹是不行的&#xff0c;需要一层一层创建然后上传&#xff0c;而且文件的大小也有限制&#xff0c;使用Git进行上传更加方便和实用 1.下载和安装Git Git - Downloads 傻瓜式安装即可 2.获取密钥对 打开自己的Github&#xff0c;创建SSH密钥&…

软件高级架构师 - 软件工程

补充中 测试 测试类型 静态测试 动态测试 测试阶段 单元测试中&#xff0c;包含性能测试&#xff0c;如下&#xff1a; 集成测试中&#xff0c;包含以下&#xff1a; 维护 遗留系统处置 高水平低价值&#xff1a;采取集成 对于这类系统&#xff0c;采取 集成 的方式&…

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域&#xff0c;LLM&#xff08;Large Memory Language Model&#xff0c;大型记忆语言模型&#xff09;架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程&#xff0c;下面我们开始优化部分&#xff1a;当一个组件只有一个render生命周期&#xff0c;那么我们可以改写成一个无状态组件&#xff08;UI组件到无状态组件&#xff0c;性能提升更好&#xff09;

Vue 监听器的魔法之旅:@Watch(‘form.productId’) vs @Watch(‘value’) 大揭秘!✨

以下是一篇技术博客&#xff0c;主题围绕 Watch(form.productId) 和 Watch(value) 这两个 watcher 的功能、区别及使用场景&#xff0c;基于 compare-form.vue 的代码。准备好一起探索 Vue 监听器的魔法了吗&#xff1f;&#x1f604; &#x1f604; Vue 监听器的魔法之旅&…

SqlSugar 语法糖推荐方式

//方式1&#xff1a;var dd _repository._Db.Queryable<ConfigAggregateRoot, UserRoleEntity>((o, p) > o.Id p.Id).Select((o, p) > new{o.Id,o.Remark,p.RoleId,});//方式2&#xff1a;不推荐使用&#xff0c;建议优先使用 Lambda 表达式&#xff0c;因为它更…

数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解

目录 一.冒泡排序 二.堆排序 三.插入排序 四.选择排序 五.希尔排序 六.快速排序 1.Lomuto版本&#xff08;前后指针法&#xff09; 2.Lomuto版本的非递归算法 3.hoare版本&#xff08;左右指针法&#xff09; 4.挖坑法找分界值&#xff1a; 七.归并排序 八.计数排序…

?算法1-4 小A点菜

题目描述 不过 uim 由于买了一些书&#xff0c;口袋里只剩 M 元 (M≤10000)。 餐馆虽低端&#xff0c;但是菜品种类不少&#xff0c;有 N 种 (N≤100)&#xff0c;第 i 种卖 ai​ 元 (ai​≤1000)。由于是很低端的餐馆&#xff0c;所以每种菜只有一份。 小 A 奉行“不把钱吃…

Linux设备驱动开发之摄像头驱动移植(OV5640)

驱动移植 这里用的是NXP提供的原厂linux内核源码&#xff0c;目的是学习ov5640相关摄像头驱动的移植。如图&#xff0c;下面是linux源码自带的ov5640的驱动相关代码&#xff1a; 这个是ov5640相关头文件&#xff1a; 新建一个文件夹保存这些ov5640的驱动文件&#xff0c;打算在…