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

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 进行脚本录制、完善和压测的过程,对项目的性能和功能进行有效的测试。

相关文章:

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))){//没找到结果&#xff1b;没有重复出现过se…...

《认知·策略·跃迁:新能源汽车工程师的深度学习系统构建指南》

--- ## 前言&#xff1a;为什么传统学习法正在杀死你的竞争力&#xff1f; 在新能源汽车领域&#xff0c;我们正经历着每18个月知识体系更新迭代的指数级变革。当磷酸铁锂电池能量密度刚突破200Wh/kg时&#xff0c;固态电池已进入量产倒计时&#xff1b;当自动驾驶还在L2级徘…...

PHP环境安装达梦数据库驱动实操

PHP环境安装达梦数据库驱动实操 一、环境准备 达梦数据库安装 从达梦官网下载对应系统版本的DM8开发版或企业版&#xff0c;完成安装并确保数据库服务正常运行。安装后需记录数据库的安装路径&#xff08;如Windows默认路径为D:\dmdbms&#xff0c;Linux为/dm/server&#xff0…...

Electron + Vite + React + TypeScript 跨平台开发实践指南

Electron Vite React TypeScript 跨平台开发全栈实践指南 开发环境的搭建(node.js&#xff0c;npm的安装)请参见我的文章 2025Q1 核心组件版本矩阵 组件版本关键改进特性Electron30.0.0原生ESM支持、V8引擎性能优化30%Vite6.0.0多核编译加速、SSR增强模式React21.0.0并发…...

Java---入门基础篇(下)---方法与数组

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

【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进

文章目录 一. 什么是分布式事务&#xff1f;二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交&#xff08;2PC&#xff09;2. TCC&#xff08;Try-Confirm-Cancel&…...

【文献阅读】Collective Decision for Open Set Recognition

基本信息 文献名称&#xff1a;Collective Decision for Open Set Recognition 出版期刊&#xff1a;IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING 发表日期&#xff1a;04 March 2020 作者&#xff1a;Chuanxing Geng and Songcan Chen 摘要 在开集识别&#xff0…...

Gorm中的First()、Create()、Update()、Delete()的错误处理

一. First() result : tx.Model(&models.Attachment{}).Where("home ? AND home_id ?", attachment.Home, attachment.HomeID).First(&existingAttachment)如果没有查询到数据&#xff0c;result.Error的值是什么&#xff1f; 在使用 GORM&#xff08;…...

【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法

面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别&#xff0c;其实这四个版本的发展实际上是一环扣一环的&#xff0c;是逐步完善的&#xff0c;本文希望帮助读者梳理清楚各个版本之间的区别&#xff0c;并且给出当前各个版本的应用情况&#xff0c;…...

Navicat连接虚拟机数据库详细教程

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

委托者模式(掌握设计模式的核心之一)

目录 问题&#xff1a; 举例&#xff1a; 总结&#xff1a;核心就是利用Java中的多态来完成注入。 问题&#xff1a; 今天刷面经&#xff0c;刷到装饰者模式&#xff0c;又进阶的发现委托者模式&#xff0c;发现还是不理解&#xff0c;特此记录。 举例&#xff1a; ​老板​…...

DeepSeek-R1 论文笔记:通过强化学习提升大语言模型的推理能力

论文标题&#xff1a;DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 作者团队&#xff1a;DeepSeek-AI 发表时间&#xff1a;2025 前置知识 & 术语 模型蒸馏 语言模型蒸馏的目标是将大型教师模型的知识&#xff08;如语义理解、上…...

实现Unity shader扭曲效果

实现思路 1、扭曲材质赋于面片 2、抓取当前一帧的图片内容 3、获取屏幕坐标 4、利用屏幕坐标对抓取的图片采样 5、再采样张扰动贴图做扭曲 Shader "Unlit/NewUnlitShader" {Properties {_DistortTex ("扰动贴图 (RGB)", 2D) "bump" {}_Di…...

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)

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

LeetCode 热题100——49.字母异位词分组

题目&#xff1a;给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。示例 1:输入: strs ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["…...

攻克模电难点(一):多级放大电路与差动放大电路实战解析

1. 多级放大电路的设计基础 第一次接触多级放大电路时&#xff0c;我被各种耦合方式绕得头晕。直到在实验室烧坏几个三极管后&#xff0c;才真正理解其中的门道。多级放大电路的核心思想很简单&#xff1a;把多个单级放大电路像搭积木一样连接起来&#xff0c;但实际设计时却要…...

深入解析Xilinx FPGA中的IDDR与ODDR原语:从原理到实践

1. 认识FPGA中的DDR采样难题 在高速数据采集和传输领域&#xff0c;双倍数据速率&#xff08;DDR&#xff09;技术已经成为标配。想象一下你正在用AD9361这类射频收发器与FPGA通信&#xff0c;数据时钟频率轻松达到数百MHz。这时候如果还沿用传统的单沿采样&#xff0c;就像用单…...

改进A星算法融合DWA算法路径规划、避障Matlab仿真(有参考文献)

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

一文学习 工作流开发 BPMN、 Flowable

一、简化查询 1. 先看一下查询的例子 /// /// 账户获取服务 /// /// /// public class AccountGetService(AccountTable table, IShadowBuilder builder) {private readonly SqlSource _source new(builder.DataSource);private readonly IParamQuery _accountQuery build…...

wordpress数据迁移---没有验证

迁移 WordPress 完整数据&#xff08;文章、页面、媒体、主题、插件、设置、评论、用户&#xff09;&#xff0c;核心是 备份旧站文件 数据库 → 新服务器配置环境 → 上传文件 导入数据库 → 修改配置 替换域名 / URL → 测试。下面分 插件一键迁移&#xff08;新手推荐&am…...

实战起步:用快马生成数据分析项目的python环境与示例代码脚手架

今天想和大家分享一个数据分析项目的快速启动方案。作为一个经常需要处理各种数据的人&#xff0c;我发现每次开始新项目时&#xff0c;重复搭建环境和初始化项目结构特别浪费时间。后来发现了InsCode(快马)平台&#xff0c;它帮我解决了这个问题。 项目初始化脚本 这个脚本会自…...

FFTW3内存管理最佳实践:fftw_malloc与数据对齐技巧

FFTW3内存管理最佳实践&#xff1a;fftw_malloc与数据对齐技巧 【免费下载链接】fftw3 DO NOT CHECK OUT THESE FILES FROM GITHUB UNLESS YOU KNOW WHAT YOU ARE DOING. (See below.) 项目地址: https://gitcode.com/gh_mirrors/ff/fftw3 FFTW3&#xff08;Fastest Fou…...

Phi-4-Reasoning-Vision镜像使用指南:双卡负载均衡与CUDA内存优化技巧

Phi-4-Reasoning-Vision镜像使用指南&#xff1a;双卡负载均衡与CUDA内存优化技巧 1. 工具概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具&#xff0c;专为双卡4090环境优化设计。这个工具能够充分发挥15B大模型的深度推…...

Qwen3.5-2B多场景案例:法律文书图识别+法条关联+类案推荐三合一系统

Qwen3.5-2B多场景案例&#xff1a;法律文书图识别法条关联类案推荐三合一系统 1. 轻量化多模态模型介绍 Qwen3.5-2B是Qwen3.5系列中的轻量化版本&#xff0c;仅有20亿参数规模&#xff0c;专为低功耗、低门槛部署场景设计。这款模型特别适合部署在端侧和边缘设备上&#xff0…...