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

性能测试-jmeter实战5

课程:B站大学
记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师

性能测试-jmeter元件实操作

  • Jmeter元件
    • 一、测试计划类(Test Plan)
    • 二、线程控制器(Controllers)
    • 三、取样器(Samplers)
    • 四、监听器(Listeners)
    • 五、断言(Assertions)
    • 六、定时器(Timers)
    • 七、前置处理器(Pre-Processor)
    • 八、后置处理器(Post-Processor)
    • 九、配置元件(Config Elements)
    • 十、函数助手对话框(Function Helper Dialog)
  • 元件作用域
    • 作用域的原则
    • jmeter实操1:
    • 重要组件
    • jmeter中操作如下:
    • 线程组的属性:
    • HTTP取样器的属性:
  • Jmeter参数化
    • 用户定义的变量
    • 用户参数
    • CSV Data Set Config
      • 参数详解(CSV 数据文件设置)
    • 函数
      • 性能测试业务中常用函数
      • JMeter函数助手:常用函数分类速查表
      • 使用技巧(针对采购业务)
  • 实践是检验真理的唯一标准


Jmeter元件

一、测试计划类(Test Plan)

元件作用

  • 测试计划(Test Plan) JMeter 脚本的根节点,用于组织整个测试流程,可配置全局变量、用户定义变量、函数、默认编码等。
  • 线程组(Thread Group) 用于模拟并发用户数(线程数)、循环次数、启动/停止时间等。它是测试计划的子节点,控制测试的并发逻辑。

二、线程控制器(Controllers)

控制器用于控制请求的执行逻辑,分为两种:

  • 逻辑控制器(Logic Controller) 元件 作用
  • 循环控制器(Loop Controller) 控制其内部元件的循环执行次数。
  • 条件控制器(If Controller) 判断是否执行其中的子元素。
  • 开关控制器(Switch Controller) 类似 switch-case,只执行选中的子元素。
  • 随机控制器(Random Controller) 从子元素中随机选一个执行。
  • 模块控制器(Module Controller) 用于跳转到某个模块(通过控制器路径指定),用于脚本复用。
  • 事务控制器(Transaction Controller) 将多个请求当成一个事务处理,可统计整个事务耗时。
  • 录制控制器(Recording Controller) 配合代理服务器使用,接收浏览器录制的请求。

三、取样器(Samplers)

取样器是真正发出请求的执行体。每个请求类型对应一个取样器。

取样器类型说明

  • HTTP 请求(HTTP Request) 用于发起 HTTP/HTTPS 请求,是最常用的接口测试元件。
  • JDBC Request 数据库查询请求(支持MySQL、Oracle等)。
  • JSR223 Sampler 使用 Groovy/Java 脚本进行自定义请求。
  • Debug Sampler 打印当前变量、属性,调试用。
  • BeanShell Sampler 使用 BeanShell 脚本语言执行请求(性能不如JSR223)。
  • FTP Request 执行 FTP 协议的上传下载操作。 SMTP Sampler 邮件发送测试。

四、监听器(Listeners)

用于查看测试结果,监听器会收集并展示响应时间、断言信息等。数据量大时不推荐同时开启太多监听器。
元件说明:

  • 查看结果树(View Results Tree) 详细查看每个请求的请求/响应数据。
  • 聚合报告(Aggregate Report) 聚合各请求的统计数据(吞吐量、平均时间等)。
  • 图形结果(Graph Results) 图形方式展示请求性能曲线。
  • 表格结果(View Results in Table) 表格形式展示每个请求的响应情况。
  • 监听器 → 写入文件 可将结果输出到 CSV/HTML 文件中进行后续分析。

五、断言(Assertions)

用于验证接口的响应是否符合预期。
元件说明

  • 响应断言(Response Assertion) 判断响应内容中是否包含指定文本、正则等。
  • 断言结果(Assertion Results) 查看断言是否通过。
  • JSON断言 断言 JSON 响应体结构(需要插件支持)。
  • XML断言 用于验证返回的 XML 内容。

六、定时器(Timers)

用于控制请求之间的延时,模拟用户真实行为。
元件说明

  • 常数定时器(Constant Timer) 固定延时。
  • 高斯随机定时器 模拟高斯分布的延时。
  • 均值随机定时器 在一个固定值的基础上加上一个范围内的随机值。
  • BeanShell Timer / JSR223 Timer 可通过脚本自定义延时时间逻辑。

七、前置处理器(Pre-Processor)

在请求发送前运行,用于准备数据或动态修改请求参数。
元件用途:

  • JSR223 PreProcessor 使用 Groovy 动态处理请求前参数(如设置 header、生成 token)。
  • User Parameters 设置不同线程的参数(多用户模拟)。

八、后置处理器(Post-Processor)

在请求执行后运行,常用于提取响应中的数据供后续请求使用。
元件用途:

  • 正则表达式提取器(Regular Expression Extractor) 从响应体中提取数据保存为变量。
  • JSON提取器(JSON Extractor) 提取 JSON 数据中的字段值(需要插件)。
  • XPath 提取器 处理 XML 响应。
  • JSR223 PostProcessor 使用脚本进行复杂的数据处理或提取。

九、配置元件(Config Elements)

提供默认参数配置,使请求更灵活。
元件说明

  • HTTP请求默认值(HTTP Request Defaults) 设置公共的 URL、端口、编码等。
  • 用户定义变量(User Defined Variables) 设置全局变量,在多个请求中复用。
  • HTTP Cookie 管理器 管理会话中的 Cookie 信息。
  • HTTP Header 管理器 设置统一的请求头。 JDBC Connection Configuration 配置数据库连接信息。

十、函数助手对话框(Function Helper Dialog)

  • 用于辅助生成 JMeter 函数表达式,例如 ${__Random(1,100,)},便于插入动态参数。

元件作用域

在JMeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的。
提示:核心是取样器,其他组件都是以取样器为核心运行的,组件添加的位置不同,生效的取样器也不同。

作用域的原则

  • 取样器:元件不和其他元件相互作用,因此不存在作用域的问题;
  • 逻辑控制器:元件只对其子节点中的取样器和逻辑控制器作用;
  • 其他七大元件:除取样器和逻辑控制器元件外,如果是某个取样器的子节点,则该元件对其父子节点起作用;
  • 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等);

jmeter实操1:

启动JMeter
在‘测试计划’下添加‘线程组’
在‘线程组’下添加‘HTTP请求’取样器
填写‘HTTP请求’的相关请求数据
在‘线程组’下添加‘察看结果树’监听器
点击‘启动’按钮运行,并查看结果
在这里插入图片描述

重要组件

  • 线程组
  • HTTP取样器
  • 察看结果树

jmeter中操作如下:

  • 添加线程组

位置:右键点击“测试计划” --> 添加 --> 线程(用户) --> 线程组

2.1.2 线程组的特点

  • 模拟多人操作
  • 线程组可以添加多个,多个线程组可以并行或串行,取样器(请求)和逻辑控制器必须依赖线程组才能使用
  • 线程组下可以添加其他元件下组件

2.1.3 线程组分类
​​

  • 线程组​​:普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户
  • ​​setUp线程组​​:一种特殊类型的线程组,可用于执行预测试操作

​​tearDown线程组​

  • 一种特殊类型的线程组,可用于执行测试后工作

线程组的属性:

  • 线程数:需要模拟的虚拟用户数。
  • ramp-up time:模拟的虚拟用户数全部启动所需要的时间。
  • 目的:为了模拟性能测试的场景,更接近用户的使用习惯(用户慢慢接入系统) 循环次数:
  • 设置为固定次数n时:脚本运行时发送请求的次数为n
  • 设置循环次数为“永远”时,脚本会一直运行下去,不停止
  • 调度器: 一般与循环次数为“永远”的设置配合使用 持续时间设置为n时:脚本的请求发送的时间为n秒在这里插入图片描述
    注意点:线程组将用于基准测试、负载测试、压力测试、持续压力测试。

HTTP取样器的属性:

http默认80端口
https默认443端口
post:json参数
get:url参数
post:path参数+json
接口请求方式对应的参数格式如下:

请求方法参数位置格式示例
GETURL 查询字符串key1=value1&key2=value2
POSTBody1. key1=value1&key2=value2
2. multipart/form-data
3. {"key":"value"}
4. <xml>...</xml>
PUTBody同 POST 的 JSON/XML
PATCHBody同 POST 的 JSON/XML
DELETEURL 或 Body/api/1{"id":1}
HEADURL 查询字符串同 GET
OPTIONSURL 查询字符串通常无参数

在这里插入图片描述

Jmeter参数化

用户定义的变量

作用​​:在测试计划或线程组级别预先定义一组固定的变量,供后续请求使用。
​​适用场景​​:

测试环境的基础配置(如 base_url、port、api_path)。
固定参数(如 user_id、token 等不会频繁变化的值)。
​​特点​​:
变量在测试开始时初始化,​​整个测试过程中值不变​​。
适用于全局共享的静态数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用户参数

作用​​:在每个线程(虚拟用户)启动时动态生成变量,支持简单的参数化。
​​适用场景​​:

每个用户需要不同的固定值(如 username、password)。
少量参数的动态化(但不适合大规模数据驱动测试)。
​​特点​​:
变量在每个线程启动时初始化,​​线程间独立​​。
适用于少量用户、少量参数的场景。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

CSV Data Set Config

作用​​:从外部 CSV 文件读取数据,实现大规模数据驱动测试。
​​适用场景​​:

需要模拟大量用户,每个用户使用不同的数据(如登录账号、订单号)。
测试数据存储在外部文件(如 users.csv)。
​​特点​​:
支持多列数据读取,可循环或按需读取。
​​适用于高性能、大规模数据驱动测试​​。
在这里插入图片描述
在这里插入图片描述

参数详解(CSV 数据文件设置)

  • 文件名​​:CSV文件路径
  • 文件编码​​:文件编译字符编码,一般设置UTF - 8
  • ​​变量名称​​:多个变量时,使用英文逗号分隔
  • ​​忽略首行​​:True为忽略,False为不忽略,默认值:False
  • 分隔符​​:如文件中使用的是逗号分隔,则填写逗号;如使用的是制表符,则填写\t;
  • ​​是否允许带引号​​:CSV文件中的内容是否允许带引号
  • ​​遇到文件结束符再次循环​​:当读取文件到结尾时,是否再从头读取文件,False=当读取文件到结尾时,停止读取文件
  • ​​遇到文件结束符停止线程​​:当“遇到文件结束符再次循环”一项为False时起效;True:当读取文件到结尾时,停止进程
  • ​​线程共享模式​​:共享模式一般默认即可
  • 所有线程:该文件在所有线程之间共享,所有线程循环取值,线程一取第一行,线程二取下一行
  • 当前线程组:各个线程组分别循环取值
  • 当前线程:每个文件分别为每个线程打开

函数

作用​​:JMeter 内置的动态变量生成工具,支持时间、随机数、字符串处理等。
​​适用场景​​:
动态生成唯一值(如 UUID、时间戳)。
随机化参数(如随机数、随机选择列表中的值)。
字符串拼接、截取等操作。
​​特点​​:
直接在请求或变量中使用,无需外部文件。
适用于动态数据生成,如 token、timestamp 等。
在这里插入图片描述
jmeter官方函数手册:函数手册
函数这里,在实际操作结合实际业务时使用,可以先自行了解下常用函数
在这里插入图片描述

性能测试业务中常用函数

JMeter函数助手:常用函数分类速查表

分类函数作用美团业务场景示例
动态数据生成__Random(min, max)生成指定范围的随机整数(如订单金额、商品数量)随机生成10-1000元的订单金额
__RandomString(length, chars)生成指定长度的随机字符串(如用户昵称、测试数据)生成8位随机用户名 __RandomString(8, abc123)
__UUID生成唯一标识符(如订单号、会话ID)模拟订单号 __UUID
__threadNum获取当前线程编号(用于区分多线程请求)日志标记 Thread-${__threadNum}
时间处理__time()获取当前时间戳(毫秒级,如性能监控打点)记录接口响应时间 __time()
__time(format)格式化时间(如 yyyyMMddHHmmss 生成订单时间)下单时间 __time(yyyyMMddHHmmss)
__dateTimeConvert()时间格式转换(如 yyyyMMdd→yyyy-MM-dd处理美团API返回的日期格式
随机化选择__RandomFromMultipleVars(var1,var2,...)从多个变量中随机选一个(如随机选商家、商品分类)随机选择外卖商家 __RandomFromMultipleVars(shop1,shop2)
__CSVRead(filename, column)从CSV文件读取指定列数据(如用户账号、地址)读取 users.csv 第1列用户名
字符串处理__split(str, delimiter)拆分字符串(如解析JSON/HTML返回值)拆分美团返回的JSON字段 __split(${resp}, ",")
__regexFunction(regex, str, template)正则表达式提取(如抓取订单ID、价格)提取订单号 __regexFunction(order_(\d+), "${resp}", "$1")
__base64Encode(str) / __base64Decode(str)Base64编解码(如加密Token、解密响应)解密美团API的加密参数
业务专用__property(key)读取JMeter全局属性(如共享Token、配置开关)获取登录Token __property(user.token)
__V(var1_var2)嵌套解析变量(如动态生成订单ID order_${__Random(1,100)}动态订单号 __V(order_${__Random(1,100)})
__BeanShell(script) / __JSR223(script)执行自定义脚本(如复杂计算、逻辑判断)模拟优惠券满减逻辑 __BeanShell(…)

使用技巧(针对采购业务)

  1. 动态参数化:用 __CSVRead 读取测试数据(用户、商品、地址),__Random 生成随机参数(金额、数量)。
  2. 时间戳标记:用 __time 记录请求时间,结合 __threadNum 分析不同线程的性能差异。
  3. Token管理:用 __property 存储登录Token,避免重复登录影响性能。
  4. 复杂逻辑:用 __BeanShell 处理美团业务特有逻辑(如优惠券叠加、满减计算)。

实践是检验真理的唯一标准

http://www.dtcms.com/a/294002.html

相关文章:

  • 4️⃣字典(dict)速查表
  • I2C控制器
  • 传统RNN模型笔记:输入数据长度变化的结构解析
  • 通用图片 OCR 到 Word API 数据接口
  • 数据结构自学Day13 -- 快速排序--“前后指针法”
  • 显微科研中的关键选择:不同显微镜相机技术特性与应用适配性全面解析
  • SpringCloudGateWay 使用nacos网关自动负载均衡
  • nrm指南
  • Sklearn 机器学习 线性回归
  • 解决sparksql创建出来的数据库路径错误的问题
  • Docker Desktop 打包Unity WebGL 程序,在Docker 中运行Unity WebGL 程序
  • Unity国际版下载链接分享(非c1国内版)
  • Java面试题035:一文深入了解Docker
  • SQL基础⑧ | 表格篇
  • Android插件化实现方案深度分析
  • 智能小e-外联系统文档
  • CentOS 7 Linux 用 yum 安装 Docker,含 Docker 镜像无法拉取问题(即 docker pull 失败)的解决方案
  • 基于LNMP分布式个人云存储
  • 深入理解 Java Builder 设计模式:解决构造函数爆炸问题
  • 旧系统UI焕新陷阱:保留业务习惯与引入新交互的平衡点把控
  • JNPF组织权限,让企业权限体系更清晰高效​
  • TARA分析学习
  • 亚远景-传统功能安全VS AI安全:ISO 8800填补的标准空白与实施难点
  • Django 入门详解:从零开始构建你的第一个 Web 应用
  • YOLOv5模型剪枝实战教程
  • 从8h到40min的极致并行优化:Spark小数据集UDTF处理的深度实践与原理剖析
  • 分布式系统中的缓存设计与应用
  • 前端实现可编辑脑图的方案
  • 一洽客服系统:小程序接入功能说明
  • 关于单片机的无符号整型uint32_x