浅谈定时器之同步定时器

news2024/11/24 13:44:21

浅谈定时器之同步定时器

“同步定时器”(Synchronizing Timer)是一个特别的定时器,它用于确保在特定时间点上多个线程(或虚拟用户)同时发起请求,这对于测试系统在高并发情况下的表现尤为重要。本文将深入解析JMeter的同步定时器及其应用。

同步定时器基础

同步定时器的主要目的是在测试执行过程中创建一个“集合点”,即等待指定数量的线程到达后,这些线程才会同时执行后续操作。这对于模拟网站或应用程序在短时间内受到大量用户访问的场景非常有用,例如电商的大促活动开始瞬间、新闻网站的热点新闻发布时等。

参数说明

  1. 模拟用户组数量:
    这是同步定时器的核心参数,指定了需要等待多少个线程达到同步点后才一起释放执行。例如,设置为100表示只有当100个线程都到达此定时器时,它们才会作为一个整体同时发送请求。
  2. 超时时间以毫秒为单位:
    指定线程等待其他线程达到同步点的最大等待时间,单位是毫秒。如果在这个时间内没有达到设定的用户数量,已到达的线程将不再等待,会直接执行后续操作。设置为0表示无限等待,直到达到指定的用户数量。

应用场景

● 压力测试:在需要模拟大量用户同时访问某一功能时,使用同步定时器可以准确控制并发用户的数量和时间点,以评估系统的最大承载能力。
● 负载测试:验证系统在预期的并发用户量下是否能稳定运行,避免因用户同时操作导致的服务崩溃或响应延迟。
● 稳定性测试:通过设定不同数量的同步用户,测试系统在不同负载水平下的稳定性表现。
配置示例

  1. 添加同步定时器:
    在JMeter的测试计划中,右击希望添加同步点的线程组,选择“添加”>“定时器”>“同步定时器”。
  2. 参数配置:
    假设我们要模拟100个用户同时下单,设置“模拟用户组的数量”为100,根据实际情况设置合适的“超时时间以毫秒为单位”的参数。
  3. 注意事项:
    ○ 使用同步定时器会显著增加测试执行的时间,特别是当设置的用户数较大且超时时间较短时。
    ○ 需要合理配置线程组中的线程数,确保至少有足够的线程能够达到同步点。
    ○ 考虑到测试环境的资源限制,避免设置过高的并发数导致测试环境崩溃。

配置示例

我们编写如下脚本
在这里插入图片描述
线程组:线程数设置为10,其他保持默认
同步定时器:模拟用户组的数量设置为9,超时时间为毫秒为单位5000
BeanShell 取样器:编写如下脚本

log.info("test");

运行脚本,查看JMeter日志如下

2024-07-01 15:01:27,011 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,011 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,011 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,011 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,011 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,011 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,012 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,012 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,012 INFO o.a.j.u.BeanShellTestElement: test
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-9
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-8
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-7
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-1
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-6
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-7
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-2
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-5
2024-07-01 15:01:27,012 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-4
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-6
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-4
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-3
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-8
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-9
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-3
2024-07-01 15:01:27,013 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-5
2024-07-01 15:01:27,014 INFO o.a.j.t.JMeterThread: Thread finished: 线程组 1-2
2024-07-01 15:01:27,111 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-10
2024-07-01 15:01:32,126 WARN o.a.j.t.SyncTimer: SyncTimer 同步定时器 timeouted waiting for users after: 5000ms
2024-07-01 15:01:32,126 INFO o.a.j.u.BeanShellTestElement: test

可以看到线程组1-1到线程组1-9都在2024-07-01 15:01:27这个时间点执行,因为设置的是10个线程,并且只是执行一次,所以线程组1-10这个线程在超时时间内等待线程是否还要运行,当超过超时时间时,线程组1-10没有等到其他线程,所以进行了一次运行。

结论

同步定时器是JMeter中实现高并发测试的关键组件之一,通过精细控制并发用户的行为,帮助测试人员更准确地评估系统在极端条件下的性能表现。正确使用同步定时器,结合其他JMeter组件,可以构建出贴近实际业务场景的性能测试方案,为软件的优化和扩容提供数据支持。

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

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

相关文章

通义灵码 Visual Studio 小白上手指南

一、下载和安装指南 本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。 步骤 1:准备工作 操作系统:Windows 10 及以上;下载并安装 ****Visual Studio 2022 17.3.0 及以上版本。 步骤 2:在 Visual Studio 202…

【Linux】:命令行参数

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux命令行参数的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入…

分享一个超级实用的东西——巴比达远程访问

前言 🎈家人们,今天我要和你们分享一个超级实用的东西——巴比达远程访问!🎉 💻有了它,无论你身在何处,都能轻松访问家中的电脑💻,就像在身边一样方便!&…

C++类型转换可调用对象

目录 C的四种可视性类型转换 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可调用对象 普通函数 函数指针 仿函数 Lambda表达式 包装器function bind C的四种可视性类型转换 C语言中的类型转换是不安全、不明确的,于是C就出了更…

JavaFX布局-BorderPane

JavaFX布局-BorderPane 实现方式Java实现FXML实现 综合案例 将容器空间分成五个区域:顶部(Top)、底部(Bottom)、左侧(Left)、右侧(Right)和中心(Center&#…

专题六:Spring源码之初始化容器BeanFactory

上一篇咱们通过一个例子介绍初始化容器上下文相关内容,并通过两个示例代码看到了Spring在设计阶段为我预留的扩展点,和我们应该如何利用这两个扩展点在Spring初始化容器上下文阶段为我们提供服务。这一篇咱们接着往下看。 老这样子下回到refresh方法上来…

OFDM关键技术——同步技术

同一符号内各子载波受到不同的相位偏转及幅度衰减, k 越大偏差越大;相位偏转与子载波序号 k 和符号序号 i 均有关,序号越大,相位偏转越大;引入了 ICI ,系统信噪比降低;当采样偏差效果累积到一定…

苍穹外卖项目 常用注解 + 动态sql

常用注解 常见的注解解析方法有两种: 编译期直接扫描:编译器在编译 Java 代码的时候扫描对应的注解并处理,比如某个方法使用Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。运行期通过反射处理&…

CesiumJS【Basic】- #038 绘制轮廓线(Primitive方式)

文章目录 绘制轮廓线(Primitive方式)1 目标2 代码2.1 main.ts绘制轮廓线(Primitive方式) 1 目标 使用Primitive方式绘制轮廓线 2 代码 2.1 main.ts var start = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);v

设备通信-MODBUS协议和485接口

因水表远程监控和水泵数据监控系统,需了解物联网开发协议。 通信协议 通信协议说白了就是一种语言,一种通信双方都能听的懂得语言。 设备常用的通信协议有MODBUS RTU,PPI,MPI等,通信协议和我们常用的语言只是叫法不一样&#x…

预约小程序源码,云开发技术,无需服务器

介绍: 很多企业的业务都需要通过服务预约来完成,比如酒店、美容、家政等等。 但很多商家因缺少合适的服务预订工具,而不知道如何让客户尽快预约。 这种情况下,制作一个自己的预约小程序,客户只需要扫码或者在微信里…

8605 删数问题

这是一个典型的贪心算法问题。我们可以从高位开始,找到第一个比后面数字大的数字,删除它,然后继续这个过程,直到删除k个数字。如果我们已经删除了k个数字,但是还没有找到一个比后面数字大的数字,那么我们就…

51-1 内网信息收集 - 内网资源探测

导语 在内网渗透过程中,通常需要利用各种技术来探测内网资源,为后续的横向渗透做准备。发现内网存活的主机及其详细信息可以帮助确定攻击方向和潜在的漏洞。 一、基于 ICMP 发现存活主机 ICMP(Internet Control Message Protocol,因特网控制消息协议)是 TCP/IP 协议簇的…

Vue2动态代理,换服务无须重启项目

1、痛点 当我们需要使用不同的服务器时,就需要手动修改vue.config.js中配置并重新启动项目。当项目越来越大时,会需要较长的时间来等待项目启动,如此反复,极大影响我们开发进度。 2、寻求解决方案 vue-cli 的代理是使用的http-p…

详解归一化、标准化、正则化以及batch normalization

文章目录 what(是什么)where(用在哪)How(如何用&&原理)归一化实现方式原理示例说明 标准化实现方式原理示例说明 正则化实现方式原理作用 Batch Normalizationpytorch中的batch normalization原理BN的作用 归一化、标准化…

Python 文件操作

文件编码 将文件的内容翻译为二进制 文件操作 打开文件 open函数 语法: open(name, mode, encoding)name:文件名的字符串,可以包含具体路径。若没有路径,则默认为与py文件位于同一层 mode:打开文件的模式&#xf…

tkinter实现进度条

tkinter实现进度条 效果代码解析导入需要的模块定义进度条 代码 效果 代码解析 导入需要的模块 import tkinter as tk from tkinter import ttk定义进度条 def start_progress():progress[value] 0max_value 100step 10for i in range(0, max_value, step):progress[valu…

职场新宠“禁止蕉绿”:解压新方式,健康新态度

近期,一种名为“禁止蕉绿”的带杆香蕉在职场人群中悄然走红,成为他们工位上的新宠。这一现象源于“蕉绿”与“焦虑”的谐音,寓意着职场人对远离焦虑、追求心理放松的渴望。在社交平台上,种植水培果蔬如香蕉、菠萝等已成为职场话题…

一文带您了解Fiddler的家族产品:Fiddler Classic、FiddlerCore、Fiddler和Cap、Fiddler Jam

最近更新了一下Fiddler(好久没更新了),然后浏览了一下官方网站,发现fillder的变化还是蛮大的,新出了好多产品,在这里我就把这些产品进行汇总比较,便于大家快速了解,快速选择自己需要…

为什么网络爬虫广泛使用HTTP代理?

一、引言 网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP 代理成…