jmeter(18)-counter计数器函数和计数器配置元件

一. 计数器函数






counter

1、计数器函数每次调用时都会生成一个新数字,从1开始逐渐增加1。计数器可以配置为将每个摸拟用户的值分开,或者为所有用户使用相同的计数器。如果每个用户的值县有单独的增量。则类似于计算测试计划中的迭代次数。全局计数器计算该请求运行的次数。

计数器使用整数变量来保存计数,因此最大值为2,147,483,647。

2、参数

1)第一个参数即TRUE,每个用户有自己的计数器;FALSE,使用全局计数器:
True 每个虚拟用户有自己的计数器,每个虚拟用户的计数器保持独立  
false:全局计数器
2)第二个参数: 存储结果的变量名(可选)//重用计数器函数创建值的引用名。
供后续引用计数器的值:
${counter}说明:

a.当第一个参数是true时,5个线程,则结果为1 1 1 1 1

运行结果:


b.当第一个参数是true时,5个线程,循环2次,则结果为1 2 1 2 1 2 1 2 1 2 (配置元件中的计数器可以设置是否在每次循环时重新计数,这里默认是否)。
理解:因为设置为true时,每个虚拟用户有自己的计数器,每个虚拟用户的计数器保持独立,所以循环2次时,第一个线程数累计计算计数器,此时计数器=2
以此类推,第五个线程数循环2次也是计算器=2,也就是一个线程数调用计算器次数是2次。








c.当第一个参数是false时,5个线程,则结果为1 2 3 4 5
理解:因为设置为false时,false:全局计数器,计算的全部线程数一起调用的次数。
每一次请求都算作一次统计,所以一共统计了5次。



d.当第一个参数是false时,5个线程,循环2次,则结果为1 2 3 4 5 6 7 8 9 10
Lable就是http请求sample的名称



 

如果多个请求引用计数器,则每个请求都遵守上面的规则,不会产生影响,独立。

场景1: 2个请求,都是设置为true


场景2:  2个请求,都是设置为false
请求与请求之间没有关系,只为各自的请求进行计数,比如我这个计数器只统计我这个请求下面的。










二.计数器配置元件
新增-配置元件-计数器

 

Starting value:给定计数器的起始值、初始值,第一次迭代时,会把该值赋给计数器 

递增(Increment):每次迭代后,给计数器增加的值

Maximum value:计数器的最大值,如果超过最大值,重新设置为初始值(Start),默认的最大值为Long.MAX_VALUE,2^63-1(如果持续压测,建议最好不要设置最大值)

数字格式Number format:可选格式,比如000,格式化为001,002;默认格式为Long.toString(),但是默认格式下,还是可以当作数字使用

引用名称(Reference Name):用于控制在其它元素中引用该值,形式:$(reference_name}

与每用户独立的跟踪计数器(Track Counter Independently for each User):

1)如果勾选<与每用户独立的跟踪计数器>,不勾选每次迭代复原计数器,即独立的
(备注:等同于计数器函数设置为true,每个虚拟用户有自己的计数器,每个虚拟用户的计数器保持独立),则每个用户有自己的值:比如用户#1 获取值为1,用户#2获取值为2。


既然是独立的
场景1: 
前提:勾选与每用户独立的跟踪计数器时,不勾选每次迭代复原计数器
请求1,计数器如下,运行结果:都是=1

 

场景2:
前提:勾选与每用户独立的跟踪计数器时,不勾选每次迭代复原计数器
5个线程 循环2次 运行结果也是12 12 12 12 12 同计数器函数运行结果

2)每次迭代复原计数器(Reset counter on each Thread Group Iteration):这点是计数器和计数器函数的不同之处!

a.可选,仅在<勾选与每用户独立的跟踪计数器时>可用;

b.勾选与每用户独立的跟踪计数器时,勾选每次迭代复原计数器,则每次线程组迭代,都会重置计数器的值,当线程组是在一个循环控制器内时比较有用。

场景2:
前提:勾选与每用户独立的跟踪计数器时,勾选每次迭代复原计数器
5个线程 循环2次 
计数器函数运行结果:11111 11111  (也就是每次线程组迭代,都会重置计数器的值)
计数器函数运行结果也是12 12 12 12 12

3) 如果不勾选与每用户独立的跟踪计数器时,即全局的,全局的计数器,比如用户#1 获取值为1,用户#2获取值还是为1;
(备注:等同于计数器函数设置为false,false:全局计数器,计算的全部线程数一起调用的次数。)



场景2: 不勾选与每用户独立的跟踪计数器时
5个线程 循环2次  ${counter}   ${__counter(false,yy)}
计数器函数=
计数器函数运行结果:12345 678910
计数器函数运行结果也是:12345 678910



 














先忽略:
与每用户独立的跟踪计数器(Track Counter Independently for each User):全局的计数器,如果不勾选,即全局的,3个vuser,两次循环,则生成6个不同的count,相当于LR的unique each interation

如果勾选,即独立的,则每个用户有自己的值,3个vuser,两次循环,则vuser1从1到2,vuser2从1到2,vuser3从1到2,相当于LR的sequential each interation

每次迭代复原计数器(Reset counter on each Thread Group Iteration):可选,仅勾选与每用户独立的跟踪计数器时可用;

如果勾选,3个vuser,两次循环,每个vuser的每次循环生成的结果都是1,相当于LR的sequential once

 

posted @ 2020-02-28 19:48  阳光美美哒  阅读(2982)  评论(0编辑  收藏  举报