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

news2025/3/4 13:18:00

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频教育网站开源系统的部署安装 (roncoo-education)服务器为ubuntu22.04.05

一、说明 前端技术体系:Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系:Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统:roncoo-education(核心框架:S…

CF 886A.ACM ICPC(Java实现)

题目分析 输入6个值,判断某三个值的和能够等于另外三个值的和 思路分析 首先判断总和是不是一个偶数,如果不是就“NO”。由于小何同学算法不好,只能使用三层for循环强行判断某三个值是否能等于总和的一半,可以就“YES”。 代码 …

Spring Boot 自动装配深度解析与实践指南

目录 引言:自动装配如何重塑Java应用开发? 一、自动装配核心机制 1.1 自动装配三大要素 1.2 自动装配流程 二、自定义自动配置实现 2.1 创建自动配置类 2.2 配置属性绑定 2.3 注册自动配置 三、条件注解深度应用 3.1 常用条件注解对比 3.2 自定…

【windows driver】 开发环境简明安装教程

一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤: 1、安装Visual Studio IDE 笔者建议安装最新版本,可以向下兼容。发文截止到目前,VS2022是首选,当前笔者由于项…

探秘基带算法:从原理到5G时代的通信变革【八】QAM 调制 / 解调

文章目录 2.7 QAM 调制 / 解调2.7.1 概述2.7.2 星座图星座图的结构与性能发射端的信息编码与接收端的解码差分编码的分类与实现差分编码的模4格雷加法器公式16QAM星座图与映射关系 2.7.3 信号表达式正交振幅调制的基本原理与系统分析相位误差对QAM性能的影响多电平正交振幅调制…

Flink性能指标详解MetricsAnalysis

文章目录 Flink 组成1.JobManager2.TaskManager3.ResourceManager4.Dispatcher5.Client6. Env JobManager MetricsTaskManager Metrics Flink 组成 1.JobManager 管理任务 作业调度:负责接收和调度作业,分配任务到 TaskManager。资源管理:…

Halcon 车牌识别-超精细教程

车牌示例 流程: 读取图片转灰度图阈值分割,找车牌内容将车牌位置设置变换区域形状找到中心点和弧度利用仿射变换,斜切车牌旋转转正,把车牌抠出来利用形态学操作拼接车牌号数字训练ocr开始识别中文车牌 本文章用到的算子(解析) Halcon 算子-承接车牌识别-CSDN博客 rgb1_to_gray…

Redis实战篇《黑马点评》8 附近商铺

8.附近商户 8.1GEO数据结构的基本用法 GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据,常见的命令有 GEOADD:添加一个地理空间…

【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡

【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡 开发背景 接下来我们直接打开我们的项目开始进一步操作, 实战开发 导入项目 我把得到的项目解压到本地,我们开…

kafka-web管理工具cmak

一. 背景: 日常运维工作中,采用cli的方式进行kafka集群的管理,还是比较繁琐的(指令复杂?)。为方便管理,可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak: cmak是 Yahoo 贡献的一款强大的 Apac…

Unity中动态切换光照贴图LightProbe的方法

关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

C++基础知识(七)之STL算法、智能指针、文件操作、C++异常、断言

二十一、STL算法 STL提供了很多处理容器的函数模板,它们的设计是相同的,有以下特点: 1)用迭代器表示需要处理数据的区间。 2)返回迭代器放置处理数据的结果(如果有结果)。 3)接受…

【Linux】线程概念与控制

线程概念与控制 一.Linux线程概念1.什么是线程?2.分页式存储管理1.虚拟地址和页表的由来2.物理内存管理3.页表4.页目录结构5.两级页表的地址转换6.缺页中断(异常) 3.线程的优点(面试题)4.线程的缺点5.线程异常6.线程用途 二.Linux进程VS线程1.进程和线程2.进程的多个…

电子电路中,正负双电源供电的需求原因

1. 允许信号双向摆动 - **交流信号的处理**:许多电路(如音频放大器、运算放大器)需要处理正负交替变化的交流信号(例如声音信号、传感器输出)。如果仅用单正电源(如12V),信号的“负…

ROS环境搭建

ROS首次搭建环境 注:以下内容都是在已经安装好ros的情况下如何搭建workplace 一、创建工作空间二、创建ROS包三、注意 注:以下内容都是在已经安装好ros的情况下如何搭建workplace 如果没有安装好,建议鱼香ros一步到位:鱼香ROS 我也是装了好久…

java后端开发day26--常用API(一)

(以下内容全部来自上述课程) 1.Math 1.简单介绍 是一个帮助我们用于进行数学计算的工具类私有化构造方法,所有的方法都是静态的 2.常用方法 不要背,忘了就查文档。 3.练习题 1.判断一个数是否为质数(优化版&am…

SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析

引言:接口测试的必要性 在微服务架构盛行的今天,SpringBoot项目的接口质量直接影响着系统稳定性。本文将分享如何通过自动化工具链实现接口的功能验证与性能压测,使用OpenAPI规范打通测试全流程,让您的接口质量保障体系更加完备。…

Python中文自然语言处理库SnowNLP

SnowNLP 介绍 SnowNLP 是一个基于 Python 的中文自然语言处理库,专为处理中文文本而设计。它受到 TextBlob 的启发,但与 TextBlob 不同的是,SnowNLP 没有使用 NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字…

Linux-计算机网络.udp

1.收发函数: read()/write () ///通用文件读写,可以操作套接字。 recv(,0) /send(,0) ///TCP 常用套机字读写 recvfrom()/sendto() ///UDP 常用套接字读写 ssize_t recv(int sockfd, void *buf, size_t len, …

【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法

【大厂AI实践】清华:清华古典诗歌自动生成系统“九歌”的算法 🌟 嗨,你好,我是 青松 ! 🌈 自小刺头深草里,而今渐觉出蓬蒿。 文章目录 **01 自动作诗缘起****1. 诗歌自动写作** **02 九歌的模型…