Jmeter书中不会教你的(14)——线程数、循环次数、计数器关系

本文详细探讨了计数器在JMeter中如何配置,如startingvalue、Increment和Maximumvalue的设置,以及Trackcounterindependentforeachuser和resetcounteroneachThreadgroupinteration的作用。通过实例演示,揭示了线程独立计数和重置计数的规则。

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

       先来说下计数器,在线程组下新增一个

starting value:表示计数开始的数值,这里设置1

Increment:递增值,设置1,表示每次循环加1

Maximum value:最大值,这里设置为10,当循环次数超过最大值时从头开始

Number format:输出的计数器的格式,这里设置为cnt00,其中00表示固定按两位数显示

Exported Variable Name:将值存入的变量名,即后面需要获取的变量,设置为cc

再增加一个beanshell sampler,用于更加清楚的打印每个输出的计数器的值

 1)先将设置1个线程,循环3次情况执行

可见一个线程的计数器最后的值为cnt03

2)再将线程组设置为1个线程,循环13次,得到最后计数器最后一个值让然为cnt03,这是因为之前设置的最大值达到后又从头开始计数

 3)将线程数设置2,循环3,由此可见每个线程都独立计数,都是从1开始

4)按照第三条设置,将counter下的Track counter independent foreach user选项反选,重新执行后可得每个线程每次循环时是在原计数上+1

 5)勾选reset counter on each Thread group interation,执行可见该选项的意思是在每个线程独立计数的基础上,每次循环时重置计数器

 需要注意的是,只有在勾选了Track counter independent foreach user时,reset counter on each Thread group interation才生效。如果没有勾选Track counter independent foreach user,reset counter on each Thread group interation勾不勾选都没有作用。

-------------------------------------------------------------------------------

如果觉得我的文章对您有用,请收藏+关注,您的支持是我坚持的动力!

### JMeter中适合的定时器选择 在JMeter中,为了实现初始10个用户、循环100次以及每秒增加1个用户的配置需求,可以考虑使用 **Constant Throughput Timer** 或者 **Precise Throughput Timer** 来精确控制请求的速度和数量[^2]。 #### Constant Throughput Timer 的适用场景 Constant Throughput Timer 是基于时间来控制请求发送频率的一种方式。它通过指定目标吞吐量(以样本/分钟为单位),使得测试能够按照预设的时间间隔触发请求。如果希望严格按时间间隔调整负载,则可以选择此选项。然而需要注意的是,实际达到的目标吞吐量可能会受到其他因素的影响,比如网络延迟或者服务器性能[^4]。 对于当前的需求来说,可以通过计算得出总的运行时间和期望的 QPS (Queries Per Second),从而推导出合适的吞吐量数值。例如,在整个过程中总共会有 \(10 + 90 \times 1\) 即 100 个用户参与测试,并且这些用户将在一定时间内完成所有的操作。假设总时间为 T 秒钟,那么对应的吞吐量应设置为: \[ \text{Throughput} = (\text{Total Requests}) / ((T)/60) \] 其中 Total Requests 可由线程数乘以循环次数获得。 #### Precise Throughput Timer 的优势分析 相比之下,Precise Throughput Timer 提供更加精细粒度上的流量管理能力,因为它依据具体的请求数目而非固定时间段来进行调度安排。因此当面对较为复杂的业务逻辑时,尤其是涉及到动态变化的工作负荷模式下,采用后者往往可以获得更好的效果表现。 综上所述,虽然两种工具都能满足基本的功能诉求,但由于题目特别强调了“每秒钟新增加一名活跃成员”的特性描述,这表明我们需要一种更为灵活可控的方法论框架去支撑实验设计思路的发展方向——此时推荐选用 **Precise Throughput Timer** 实现这一目的。 以下是简单的脚本示例用于演示如何构建这样的压力环境: ```java // 设置线程属性 Thread Group { Number of Threads: 10 // 初始用户数目 Ramp-Up Period: 0 // 不需要渐增启动阶段 Loop Count: 100 // 总体迭代轮次 } // 添加计数器组件以便追踪实时在线人数状态更新情况 Counter Config Element { Start: 1 // 起始编号 End: 100 // 终止界限等于最终预期累积总量 Increment: 1 // 步长大小保持不变 Reference Name: userCount // 定义变量名便于后续引用调用 } // 配合恰当类型的延时机制达成既定速率指标调控意图 Precise Throughput Timer { // 关键所在部分 Target Throughput: ${__P(userCount)} requests per minute } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

agrapea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值