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

摘要:
I Counter函数counter1。每次调用计数器函数时,将生成一个新的数字,从1开始,逐渐增加1。全局计数器计算请求的运行次数。理解:设置为true时,每个虚拟用户都有自己的计数器,并且每个虚拟用户的计数器保持独立。因此,当第一个线程的数量循环两次时,计数器将累积并计算。此时,计数器=2,依此类推。当第五个线程的次数循环两次时,计数器=1。也就是说,线程调用计数器的次数为2。

一. 计数器函数

jmeter(18)counter计数器函数和计数器配置元件第1张


jmeter(18)counter计数器函数和计数器配置元件第2张

counter

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

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

2、参数

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

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

运行结果:

jmeter(18)counter计数器函数和计数器配置元件第3张jmeter(18)counter计数器函数和计数器配置元件第4张jmeter(18)counter计数器函数和计数器配置元件第5张


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

jmeter(18)counter计数器函数和计数器配置元件第6张jmeter(18)counter计数器函数和计数器配置元件第7张jmeter(18)counter计数器函数和计数器配置元件第8张
jmeter(18)counter计数器函数和计数器配置元件第9张





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

jmeter(18)counter计数器函数和计数器配置元件第10张jmeter(18)counter计数器函数和计数器配置元件第11张jmeter(18)counter计数器函数和计数器配置元件第12张jmeter(18)counter计数器函数和计数器配置元件第13张

d.当第一个参数是false时,5个线程,循环2次,则结果为1 2 3 4 5 6 7 8 9 10
Lable就是http请求sample的名称
jmeter(18)counter计数器函数和计数器配置元件第14张


 

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

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

jmeter(18)counter计数器函数和计数器配置元件第15张


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



jmeter(18)counter计数器函数和计数器配置元件第16张






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

 jmeter(18)counter计数器函数和计数器配置元件第17张

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。
jmeter(18)counter计数器函数和计数器配置元件第18张

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

jmeter(18)counter计数器函数和计数器配置元件第19张jmeter(18)counter计数器函数和计数器配置元件第20张jmeter(18)counter计数器函数和计数器配置元件第21张

 

场景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:全局计数器,计算的全部线程数一起调用的次数。)

jmeter(18)counter计数器函数和计数器配置元件第22张

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


 














先忽略:
与每用户独立的跟踪计数器(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

 

免责声明:文章转载自《jmeter(18)counter计数器函数和计数器配置元件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQLServer之Compute/ComputeBy实现数据汇总MySQL三种备份下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux下多线程查看工具(pstree、ps、pstack)

1. pstree pstree以树结构显示进程 $ pstree -p work | grep ad sshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)                                                 |-{ad_...

多线程下C#如何保证线程安全?

  多线程编程相对于单线程会出现一个特有的问题,就是线程安全的问题。所谓的线程安全,就是如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的。 线程安全问题都是由全局变量及静态变量引起的。   为了保证多线程情况下,访问静态变量的安全,可以用锁机制来...

Jmeter-连接mysql取值

转自:https://blog.csdn.net/weixin_42384941/article/details/105322371 1、下载数据库驱动(https://dev.mysql.com/downloads/connector/j/) Select Operating System: platform independent 注:驱动和数据库版本...

线程池阻塞队列之LinkedBlockingQueue

LinkedBlockingQueue介绍 LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。 此外,LinkedBlockingQueue可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VALUE。 LinkedBloc...

JAVA线程池调优

    在JAVA中,线程可以使用定制的代码来管理,应用也可以利用线程池。在使用线程池时,有一个因素非常关键:调节线程池的大小对获得最好的性能至关重要。线程池的性能会随线程池大小这一基本选择而有所不同,在某些条件下,线程池过大对性能也有很多不利的影响。     所有线程池的工作方式本质是一样的:有一个任务队列,一定数量的线程会从该任务队列获取任务然后执行...

Qt线程的简单使用(一)——通过QObject::moveToThread()创建线程

Qt中线程的一种创建方式,就是使用QObject::moveToThread()函数。如下,直接上源代码,可以把费时的任务放到doWork()方法里进行,不阻塞主线程。 1 #ifndef WORKER_H 2 #define WORKER_H 3 4 #include <QObject> 5 6 class Worker : public...