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

Jmeter系列(八)-定时器(待更新)

JMeter 中的定时器(Timers)是核心元件之一,用于在采样器(Sampler)之间引入延迟。它们的主要目的是:

  1. 模拟用户思考时间: 真实用户在操作之间会停下来阅读、思考或输入信息。定时器可以模拟这种行为,使测试负载更接近实际用户行为。

  2. 控制请求发送速率: 防止 JMeter 以服务器可能无法处理的最大速度发送请求,避免压垮服务器或产生不真实的压力曲线。

  3. 创建更真实的负载分布: 避免所有请求在同一毫秒内到达,模拟现实中用户请求的随机到达。

  4. 同步虚拟用户: 特定的定时器(如同步定时器)可以让多个线程在同一时刻发起请求,模拟瞬间高并发场景(如秒杀、抢购)。

规则:

  • 作用域: 定时器的作用域取决于其放置位置:

    • 放在采样器之下:仅对该采样器生效(在采样器执行前等待)。

    • 放在线程组/控制器(如简单控制器)之下:对其作用域内的所有采样器生效。

    • 放在线程组顶层:对整个线程组的所有采样器生效。

  • 叠加性: 如果多个定时器作用于同一个采样器,它们的延迟时间会被叠加。例如,一个固定定时器(1000ms)加一个高斯随机定时器(平均500ms),总延迟可能在1500ms左右(1000ms + 随机值)。

  • 执行顺序: 在同一个作用域内,定时器在采样器之前、前置处理器之后执行。配置元件 > 前置处理器 > 定时器 > 采样器 > 后置处理器 > 断言 > 监听器。

一、固定定时器

  • 作用: 在采样器执行前引入一个固定长度的延迟。

  • 参数:

    • 线程延迟(毫秒):固定的等待时间(以毫秒为单位)。

  • 使用场景:

    • 需要在每个请求之间精确地等待相同的时间。

    • 测试需要严格遵守特定请求间隔率的场景。

    • 作为其他更复杂定时器的基准或组成部分。

  • 示例: 模拟用户每次点击后固定思考 3 秒,设置 线程延迟 为 3000

二、统一随机定时器

三、Precise Throughpupt Timer(准确的吞吐量定时器)

四、Constant Throughpupt Timer(常数吞吐量定时器)

  • 作用: 这是最强大也最常用的定时器之一,用于控制整个测试计划或部分测试计划的吞吐量(每分钟的采样数)。JMeter 会根据设定的目标吞吐量动态调整线程之间的等待时间,努力达到指定的请求速率。

  • 参数:

    • 目标吞吐量(每分钟的样本数)核心参数,指定你希望达到的平均请求速率(按每分钟计算)。

    • 基于计算吞吐量:选择吞吐量计算的范围

      • 此线程仅:每个线程独立计算自己的吞吐量

      • 所有活动线程 (默认且最常用):基于当前所有活动线程(同一线程组内) 的总吞吐量来计算延迟。确保整个线程组达到目标总吞吐量。

      • 当前线程组中的所有活动线程:同上,作用域明确为当前线程组。

      • 所有活动线程(共享):跨所有线程组的活动线程计算总吞吐量。用于需要精确控制跨多个线程组的总请求速率的复杂场景。

  • 工作原理: JMeter 会计算当前实际的吞吐量(每分钟处理的样本数),并与目标比较。如果实际吞吐量低于目标,它会减少延迟时间(甚至为0)让线程更快发出请求;如果实际吞吐量高于目标,它会增加延迟时间来减慢请求速度。

  • 使用场景:

    • 精准控制请求压力: 需要以恒定速率(如每分钟 1000 个请求)向服务器施压,观察服务器在不同恒定负载下的表现(响应时间、错误率、资源使用率)。

    • 避免突发流量:相比固定线程数,它能更平滑地产生负载。

    • 容量规划:确定系统在特定请求速率下的处理能力和瓶颈。

  • 注意事项:

    • 单位是 每分钟 如果需要每秒的吞吐量,需要换算(例如 60 请求/秒 = 3600 请求/分钟)。

    • 目标吞吐量是平均值,瞬时速率会有波动。

    • 线程数必须足够: 要达到很高的目标吞吐量,必须有足够多的活跃线程来产生请求。如果线程数太少,即使延迟为0,也无法达到目标。

    • 通常放在线程组层级来控制整个线程组的吞吐量。

  • 示例: 要模拟系统持续承受 50 请求/秒的压力,设置 目标吞吐量 = 3000 (50 * 60),基于计算吞吐量 = 所有活动线程

五、JSR223 Timmer

六、同步定时器

  • 作用: 让一定数量的虚拟用户(线程)在某个点(超时时间内)等待,直到达到指定数量后,所有等待的线程在同一个瞬间(毫秒级)同时释放,触发其下一个采样器。用于模拟瞬间高并发。

  • 参数:

    • 模拟用户组的数量:需要聚集多少个线程后才一起释放执行。如果设置为 0,则等于线程组中设置的线程数(所有线程一起同步)。

    • 超时时间(毫秒):线程等待其他线程加入的最大时间(毫秒)。如果在此时间内未达到指定的线程数,已到达的线程也会被释放(避免线程永远等待)。

  • 使用场景:

    • 秒杀、抢购、限时优惠券领取 模拟大量用户在同一时刻点击“提交订单”或“立即抢购”。

    • 系统登录峰值: 模拟上班打卡时大量用户同时登录系统。

    • 缓存击穿: 模拟大量请求同时查询一个刚过期的缓存项,导致请求穿透到数据库。

    • 测试系统的突发流量处理能力和瞬间并发上限。

  • 注意事项:

    • 显著增加测试的响应时间(因为线程在等待),这个增加的等待时间是为了制造并发,本身不是系统的处理时间。

    • 需要合理设置 超时时间,避免线程因等待不足而长时间阻塞。通常设置在几秒到几十秒。

    • 同步点之后的请求会瞬间爆发,对服务器压力极大。

  • 示例: 模拟 1000 个用户同时抢购商品。设置 模拟用户组的数量 = 1000超时时间 = 10000 (10秒)。前 999 个到达该定时器的线程会等待,直到第 1000 个线程到达(或在 10 秒超时后),然后这 1000 个线程会几乎同时执行下一个采样器(如下单请求)。

七、泊松随机定时器

八、高斯随机定时器

九、BeanShell 定时器

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

相关文章:

  • 电缆安全双保险:不止防盗,更能防触电的塔能智慧照明守护方案
  • 【推荐100个unity插件】使用C#或者unity实现爬虫爬取静态网页数据——Html Agility Pack (HAP)库和XPath 语法的使用
  • 腾讯位置商业授权鸿蒙地图SDK
  • 【中等】题解力扣22:括号生成
  • 【专题十二】栈
  • 调用接口报错,使用postman调用就没问题如何解决
  • Redis 生产实战 7×24:容量规划、性能调优、故障演练与成本治理 40 条军规
  • Apollo10.0学习——control模块(2)之纵向控制器参数说明
  • Redisson布隆过滤器原理以及解决Redis缓存穿透方案
  • 单片机(STM32-时钟系统)
  • js是实现记住密码自动填充功能
  • PyCharm 高效入门指南:从安装到进阶,解锁 Python 开发全流程
  • EXCEL VBA合并当前工作簿的所有工作表sheet
  • 切比雪夫不等式的理解以及推导【超详细笔记】
  • C语言---动态内存管理
  • 李宏毅《生成式人工智能导论》 | 第15讲-第18讲:生成的策略-影像有关的生成式AI
  • Google(谷歌)搜索引擎蜘蛛IP地址段
  • ubuntu--curl
  • 《Java Web 核心:Servlet、会话与过滤器笔记》
  • AndroidStudio环境搭建
  • vue svg实现一个环形进度条组件
  • 石子入水波纹效果:顶点扰动着色器实现
  • 【44】MFC入门到精通——MFC 通过Button按钮添加控件变量实现:按下 按钮变色 (比如开关 打开关闭状态) MFC更改button控颜色
  • Git简介与特点:从Linux到分布式版本控制的革命
  • 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
  • Linux Swap区深度解析:为何禁用?何时需要?
  • 【Java EE初阶 --- 网络原理】网络编程
  • Vue3 + WebSocket
  • 基于现代R语言【Tidyverse、Tidymodel】的机器学习方法
  • 3.2 函数参数与返回值