抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Timer (定时器)

ps:以当前版本5.1.1为例

1.Constant Timer (固定定时器)

这个好比python中的time.sleep, 单位是毫秒。

image.png

这里设置5000毫秒,就是5秒,然后跟他同一级sample都会延迟5秒在执行。

先说结论,加入了Constant Timer后,不管他位置在哪里,假设如下图这样,先等5秒才会执行百度1,百度1执行完等5秒才会执行百度2,再等5秒执行百度3

image.png

可以看下时间线

image.png

image.pngimage.png

55分35秒开始,5秒后,55分40秒才发送了第一个请求。 后面两个请求也都延迟了5秒。

如果你不希望所有sample都执行定时器,那么需要把定时器加到子节点下。例如

image.pngimage.png

这样,线程启动会立即执行百度1,然后等待5秒,执行百度2,百度2执行完立即执行百度3,不再停顿。

2.Uniform Random Timer(统一随机定时器)

image.png

和高斯随机定时器的作用差异不大,区别在于延时时间在指定范围内且每个时间的取值概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏移值之和。

Random Delay Maxim um (in millseconds): 随机延迟时间的最大毫秒数

Constant Delay Offset (in millseconds): 暂停的毫秒数减去随机延迟的毫秒数

3.Precise Throughput Timer(准确的吞吐量定时器)

image.png

这个号称是可以让使用者控制吞吐量更灵活。

先是时间维度,每秒或者每分需要达到多少吞吐量,然后还可以设定按哪种规则分布(如泊松,高斯)

如默认添加后的数值为例,这个例子就是说,3600秒内,会执行100次请求,那么每秒是 100/300 就是0.3333的 throughput。)

这个timer资料太少了,找了半天没有找到,官网也没说的清楚,其他参数就不不做过多解释了,避免歧义。感觉一般也使用不到,先掠过。

4.Constant Throughput Timer(常数吞吐量定时器)

image.png

可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。

目标吞吐量(每分钟的样本量):每分钟执行的吞吐量。

基于计算吞吐量:设定上述吞吐量的生效对象,如当前线程、当前线程组、所有线程组等。

计算吞吐量的依据可以是最近一次线程的执行时延。这种定时器在特定的场景下,还是很有用的。

试验下,恒定20TPS,那么对应这里的目标吞吐量就是20*60=1200。

然后设置线程组单线程,持续60秒

image.pngimage.png

看下聚合报告

image.png

可以看到结果是20TPS。

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

翻译过来是高斯随机定时器,应用场景举例:假如一个购物网站,一个商品页面,每个用户进来都会等待不定时来浏览商品,需要模拟这种随机等待时间。

image.png

Deviation(in millseconds):偏差

Constant Delay Offset(in millseconds):固定延迟偏移

用Random类中的nextGaussian()方法,可以产生服从高斯分布的随机数,高斯分布即标准正态分布,均值为0,方差为1。

产生N(a,b)的数:Math.sqrt(b)*random.nextGaussian()+a; 即均值为a,方差为b的随机数。

按照上图的设置,a=100, b=300。范围在Math.sqrt(300)*random.nextGaussian()+100之间

什么是高斯随机?https://zhidao.baidu.com/question/89318504.html

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

image.png

这个定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。

上面表示暂停时间会分布在100到400毫秒之间:

Lambda(in milliseconds): 兰布达值

Constant Delay Offset(in milliseconds): 暂停的毫秒数减去随机延迟的毫秒数

泊松分布参考 https://baike.baidu.com/item/%E6%B3%8A%E6%9D%BE%E5%88%86%E5%B8%83?fr=aladdin

7.Synchronizing Timer(同步定时器)

同步定时器,这个定时器的作用是阻塞线程,设定一个值,直到达到指定数量的线程数后,再一起释放,可以再瞬间产生很大的压力。 我们测迸发要求同一时间,但是实际上线程并不能完全一起启动,使用同步定时器则可以达到这种效果。

image.png

Number of Simulated Users to Group by: 模拟用户的数量,即指定同时释放的线程数数量

Timeout in milliseconds: 超时时间,即超时多少毫秒后同时释放指定的线程数

来试一下

image.png image.png

1000个线程,同步定时器的阻塞线程数量也设置为1000,也就是说我想要他全部启起来之后,再执行。

如果你观察界面上的线程使用情况就可以发现。

image.png

一般情况下,线程启动后就开始执行了,你会看到左边的数值一下子上升,但还没到1000就已经开始下降,那是因为前面启动的线程已经执行结束了,线程退出执行。

而使用了同步定时器,你会发现,左边数值会提升到1000以后,才开始减小。

这个不太好截图,自己试一下,观察下圈出来的地方的数值变化。

8.BeanShell Timer(BeanShell定时器)

image.png

这个定时器也是支持beanshell语法的,也可以说功能是最强大的,可以通过自定义代码来完成你想做的事情的。有点和beanshell sample的用法类似,但是beanshell timer不常使用。

评论