JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
一、项目背景
在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以进行有效的压测。
二、JMeter 自带工具脚本录制流程
第一步:增加录制组件
打开 JMeter,在测试计划中右键点击,选择“添加” -> “非测试元件” -> “HTTP(S) Test Script Recorder”。这一组件是实现脚本录制的核心,它将作为代理服务器来捕获浏览器发送的请求。
第二步:设置代理(把 JMeter 作为代理)
- 获取 JMeter 所在机器的 IP 地址。在命令提示符中输入
ipconfig
命令,得到当前机器的 IP 地址,假设为192.168.0.17
。 - 打开“控制面板”,找到“Internet 选项”。
- 在“Internet 选项”窗口中,切换到“连接”选项卡。
- 点击“局域网设置”按钮,在弹出的“局域网 (LAN) 设置”窗口中,勾选“为 LAN 使用代理服务器”,并在“地址”栏中输入 JMeter 所在机器的 IP 地址
192.168.0.17
,在“端口”栏中输入 JMeter 代理服务器将要使用的端口号(后续在 JMeter 中配置)。
第三步:配置 JMeter 的代理服务器
- 回到 JMeter 的“HTTP(S) Test Script Recorder”界面。
- 在“端口”字段中设置一个未被占用的端口号,例如
8888
。 - 在“目标控制器”中选择一个线程组,录制的脚本将被添加到该线程组中。可以先创建一个新的线程组,例如命名为“录制线程组”。
- 可以根据需要配置“排除模式”,用于排除一些不需要录制的请求,如静态资源(图片、CSS、JavaScript 文件等)的请求。常见的排除模式可以是
.*\.(jpg|jpeg|png|gif|css|js)
。
第四步:启动服务并且访问项目进行录制
- 在“HTTP(S) Test Script Recorder”界面点击“Start”按钮,启动 JMeter 代理服务器。
- 打开浏览器,访问要测试的项目。在浏览器中进行各种操作,如登录、浏览页面、提交表单等,JMeter 会自动捕获这些操作产生的请求,并将其添加到选择的线程组中。
三、使用 BadBoy 录制脚本流程
第一步:安装和启动 BadBoy
从官方渠道下载 link并安装 BadBoy 工具。安装完成后,启动 BadBoy。
第二步:开始录制
- 在 BadBoy 的地址栏中输入要测试项目的 URL,然后按回车键访问该网站。
- 点击 BadBoy 界面上的“Record”按钮,开始录制操作。
- 在浏览器窗口中进行各种操作,如点击链接、填写表单、提交数据等。BadBoy 会实时记录每一个操作步骤。
第三步:停止录制并保存脚本
- 完成所有需要录制的操作后,点击 BadBoy 界面上的“Stop”按钮,停止录制。
- 点击“File” -> “Save As”,将录制的脚本保存为
.bbb
格式的文件。
第四步:将 BadBoy 脚本导入 JMeter
- 打开 JMeter,在测试计划中右键点击,选择“添加” -> “非测试元件” -> “BadBoy 录制的脚本导入器”。
- 在“BadBoy 录制的脚本导入器”界面中,点击“浏览”按钮,选择之前保存的
.bbb
格式的文件。 - 点击“导入”按钮,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_ip
和server_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. 增加【事务控制器】(注意打勾),【仅一次控制器】,有可能要加【吞吐量控制器】
- 事务控制器:在需要统计一组请求的总响应时间和吞吐量的地方添加“逻辑控制器” -> “事务控制器”,勾选“生成父样本”。例如,将登录和进入主页的请求放在一个事务控制器中,用于统计整个登录流程的性能指标。
- 仅一次控制器:在需要某个请求只执行一次的地方添加“逻辑控制器” -> “仅一次控制器”。例如,登录请求通常只需要执行一次,将登录请求放在仅一次控制器中。
- 吞吐量控制器:如果需要控制某个请求或一组请求的执行频率,可以添加“逻辑控制器” -> “吞吐量控制器”。设置“目标吞吐量”和“计算模式”,以实现对吞吐量的精确控制。
五、增加断言
为了确保接口的响应符合预期,需要添加断言。例如,在登录接口中添加“响应断言”,设置“要测试的响应字段”为“响应文本”,“模式匹配规则”为“包含”,“测试模式”为“登录成功”。这样,当登录接口的响应文本包含“登录成功”时,断言通过;否则,断言失败。
六、开始做压测:并发
为了模拟大量用户同时访问系统的情况,需要设置并发用户数。可以使用“同步定时器”来实现并发。
- 在需要并发执行的请求所在的线程组中添加“定时器” -> “同步定时器”。
- 在“同步定时器”界面中,设置“集合点数量”为要并发的用户数,例如
100
。当达到指定数量的线程到达集合点时,这些线程将同时释放,模拟并发访问。 - 调整线程组的“线程数”、“循环次数”和“Ramp - Up Period(秒)”等参数,以控制测试的规模和持续时间。例如,设置“线程数”为
100
,“循环次数”为10
,“Ramp - Up Period(秒)”为10
,表示在 10 秒内启动 100 个线程,每个线程循环执行 10 次请求。
通过以上步骤,可以完成一个完整的使用 JMeter 自带工具和 BadBoy 进行脚本录制、完善和压测的过程,对项目的性能和功能进行有效的测试。
相关文章:
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)
JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式) 一、项目背景 在软件测试过程中,使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制,并完善脚本以…...
Jackson注解实战:@JsonInclude的妙用
在日常的Java开发中,我们经常需要将Java对象序列化为JSON格式,以便进行数据传输或存储。然而,有时候我们并不希望在JSON中包含某些空值或不必要的字段,这不仅会增加数据的冗余性,还可能对后续的处理造成困扰。Jackson库…...

CAN总线通信协议学习1——物理层
首先来看看CAN是怎么产生的:简单理解,CAN就是一种“拥有特别连接方式”的数据传输的总线,其有特定的一些规则。 (注:资料及图片来源于知乎博主TOMOCAT。) CAN总线的结构 查阅参考文献,OSI标准…...
Vim 常用快捷键大全:跳转、编辑、查找替换全解析
摘要: Vim 是一款非常强大的文本编辑器,许多程序员和系统管理员都离不开它。 本文详细介绍了 Vim 编辑器中的常用快捷键和命令,从基本模式、光标移动、编辑操作到查找替换,再到文件保存等常用操作,帮助你快速上手并提…...

【Python 数据结构 2.时间复杂度和空间复杂度】
Life is a journey —— 25.2.28 一、引例:穷举法 1.单层循环 所谓穷举法,就是我们通常所说的枚举,就是把所有情况都遍历了的意思。 例:给定n(n ≤ 1000)个元素ai,求其中奇数有多少个 判断一…...

【Qt QML】QML鼠标事件(MouseArea)
QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …...
LeetCode 202. 快乐数 java题解
https://leetcode.cn/problems/happy-number/description/ 哈希表 class Solution {public boolean isHappy(int n) {if(n1) return true;HashSet<Integer> setnew HashSet<>();while(n!1&&!(set.contains(n))){//没找到结果;没有重复出现过se…...
《认知·策略·跃迁:新能源汽车工程师的深度学习系统构建指南》
--- ## 前言:为什么传统学习法正在杀死你的竞争力? 在新能源汽车领域,我们正经历着每18个月知识体系更新迭代的指数级变革。当磷酸铁锂电池能量密度刚突破200Wh/kg时,固态电池已进入量产倒计时;当自动驾驶还在L2级徘…...
PHP环境安装达梦数据库驱动实操
PHP环境安装达梦数据库驱动实操 一、环境准备 达梦数据库安装 从达梦官网下载对应系统版本的DM8开发版或企业版,完成安装并确保数据库服务正常运行。安装后需记录数据库的安装路径(如Windows默认路径为D:\dmdbms,Linux为/dm/server࿰…...
Electron + Vite + React + TypeScript 跨平台开发实践指南
Electron Vite React TypeScript 跨平台开发全栈实践指南 开发环境的搭建(node.js,npm的安装)请参见我的文章 2025Q1 核心组件版本矩阵 组件版本关键改进特性Electron30.0.0原生ESM支持、V8引擎性能优化30%Vite6.0.0多核编译加速、SSR增强模式React21.0.0并发…...

Java---入门基础篇(下)---方法与数组
前言 本篇文章主要讲解有关方法与数组的知识点 ,是基础篇的一部分 , 而在下一篇文章我会讲解类和对象的知识点 入门基础篇上的链接给大家放在下面啦 ! Java---入门基础篇(上)-CSDN博客 感谢大家点赞👍🏻收藏⭐评论✍🏻 欢迎各位大佬指点…...

【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进
文章目录 一. 什么是分布式事务?二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交(2PC)2. TCC(Try-Confirm-Cancel&…...

【文献阅读】Collective Decision for Open Set Recognition
基本信息 文献名称:Collective Decision for Open Set Recognition 出版期刊:IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING 发表日期:04 March 2020 作者:Chuanxing Geng and Songcan Chen 摘要 在开集识别࿰…...
Gorm中的First()、Create()、Update()、Delete()的错误处理
一. First() result : tx.Model(&models.Attachment{}).Where("home ? AND home_id ?", attachment.Home, attachment.HomeID).First(&existingAttachment)如果没有查询到数据,result.Error的值是什么? 在使用 GORM(…...
【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法
面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别,其实这四个版本的发展实际上是一环扣一环的,是逐步完善的,本文希望帮助读者梳理清楚各个版本之间的区别,并且给出当前各个版本的应用情况,…...

Navicat连接虚拟机数据库详细教程
Navicat连接虚拟机数据库详细教程 以Windows主机 上的navicat 连接ubuntu虚拟机为例 确认虚拟机ip地址和主机ip地址 主机地址查询 cmd输入ipconfig 登录mysql 创建用户 CREATE USER newuserlocalhost IDENTIFIED BY password; CREATE USER newuser% IDENTIFIED BY passwor…...

委托者模式(掌握设计模式的核心之一)
目录 问题: 举例: 总结:核心就是利用Java中的多态来完成注入。 问题: 今天刷面经,刷到装饰者模式,又进阶的发现委托者模式,发现还是不理解,特此记录。 举例: 老板…...

DeepSeek-R1 论文笔记:通过强化学习提升大语言模型的推理能力
论文标题:DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 作者团队:DeepSeek-AI 发表时间:2025 前置知识 & 术语 模型蒸馏 语言模型蒸馏的目标是将大型教师模型的知识(如语义理解、上…...
实现Unity shader扭曲效果
实现思路 1、扭曲材质赋于面片 2、抓取当前一帧的图片内容 3、获取屏幕坐标 4、利用屏幕坐标对抓取的图片采样 5、再采样张扰动贴图做扭曲 Shader "Unlit/NewUnlitShader" {Properties {_DistortTex ("扰动贴图 (RGB)", 2D) "bump" {}_Di…...

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)
七星棋牌源码 是一款运营级的棋牌产品,覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区,支持 安卓、iOS 双端,并且 全开源。这个版本是 修复优化后的二开版本,新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...