Jmeter--Timer设置等待时间

本文详细介绍了JMeter中定时器的概念及其应用场景,包括如何通过不同的定时器(如固定定时器、高斯随机定时器和泊松随机定时器)来模拟真实的用户行为,从而更准确地进行性能测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Jmeter定时器的概念:
1)定时器是在每个sampler(采样器)之前执行的,而不是之后;
是的,你没有看错,不管这个定时器的位置放在sampler之后,还是之下,它都在sampler之前得到执行。
2)定时器是有作用域的;当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3)如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入;
4)如果希望在sampler执行完之后再等待,则可使用Test Action;

 

二、Jmeter中定时器的应用

1.正常的性能测试,在每个请求中获取到重要的性能指标值以后,在每个请求中需要设置等待时间,这样比较接近服务器真实环境的请求。
2.这两种设置等待时间的方式比较常用:
(1)Gaussian Random Timer 服从高斯分布,等待时间比较符合
(2)Poisson Random Timer 服务帕松分布

 3.首先User Defined Variables定义所需要的参数,如下:

使用方法:在对应的需要使用参数的位置,使用${ip}, ${port}替代。
应用场景:当测试环境变化时,我们只需要修改一处的ip,port就可以让脚本马上应用于另外一个环境的测试,而不需要逐个脚本进行修改。

上面设置的参数,在如下接口中的应用如下:

 

4.配置各个接口的等待时间参数,设置全部请求的等待时间,配置等待时间常用方式有以下几种:

(1)固定定时器(Constant Timer)

当放置Constant Timer于两个http请求之间,那么它代表的含义是:在上一个请求发出至完成后,开始Contant Timer指定的时间,最后再发出第二个请求.它并不是代表两个请求之间的发送间隔时间.这是最重要的定时器。
    注意:固定定时器的延时不会计入单个java sampler的响应时间,但会计入事务控制器的时间。

(2)高斯随机定时器(Gaussian Random Timer)

定时器的延时时间是在指定范围内的正态分布。如需要每个线程在请求前按随机时间停顿,那么使用这个定时器,下图表示暂停时间会分布在100到400之间

(3)泊松随机定时器(Poisson Random Timer)

这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。
下面表示暂停时间会分布在100到400毫秒之间:
1)Lambda(in milliseconds):兰布达值
2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数

 

转载于:https://www.cnblogs.com/amberdyy/p/8992510.html

### 如何在 JMeter 的循环控制器中配置定时器 为了实现在 JMeter 中的循环控制器内设置等待时间,可以采用两种主要方法之一:一是通过在测试计划中的线程组下直接添加定时器;二是将定时器放置于特定的采样器之前或之后。当把定时器放在循环控制器内部时,在每次迭代前都会应用该延迟[^1]。 #### 方法一:使用恒定定时器 如果目标是在每一次循环开始前引入固定的时间间隔,则可以在循环控制器之下加入 **Constant Timer**(恒定定时器)。此组件允许指定毫秒单位下的暂停周期。例如,要创建一个两秒钟(即2000毫秒)的延时: 1. 右键点击想要关联到的循环控制器; 2. 选择 `Add` -> `Timer` -> `Constant Timer`; 3. 设置所需的延迟时间为2000 ms (或其他任何期望值)[^1]. ```java // Constant Timer Configuration Example Thread.sleep(2000); // This is a Java example, not actual JMeter configuration. ``` #### 方法二:利用BeanShell 定制逻辑 对于更复杂的场景,比如动态计算每轮之间的休眠期长度,可考虑运用 BeanShell 预处理器/后置处理程序来编写自定义脚本实现这一功能。这使得能够基于先前响应的内容或者其他条件灵活调整等待时间- 添加一个新的 `Beanshell Sampler` 或者 `BeanShell PreProcessor / Post Processor` 到循环体内; - 编写一段简单的Java代码片段用于控制流程并执行必要的操作,如调用 `sleep()` 函数模拟等待行为; ```beanshell // Beanshell Script to Implement Dynamic Wait Time import java.util.concurrent.TimeUnit; long waitTimeInMilliseconds = ... ; // Define your logic here for determining the wait time System.out.println("Waiting " + TimeUnit.MILLISECONDS.toSeconds(waitTimeInMilliseconds) + " seconds..."); Thread.sleep(waitTimeInMilliseconds); ``` 无论采取哪种方式,都应确保所选方案满足性能测试的具体需求,并考虑到可能影响整体吞吐量的因素。值得注意的是,虽然上述例子展示了如何在一个单独的地方集中管理所有的延迟,但在实际项目里也可能存在多个不同的地方需要用到类似的机制,这时就需要根据具体情况分别对待了[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值