如何在JMeter动态线程组中获取当前步骤的活跃线程数量?
JMeter动态线程组获取当前步骤活跃线程数方案
你之前使用的prev.getAllThreads()依赖上一个采样器的执行结果,第一步没有前置采样器时自然返回空,不适合实时统计当前步骤的线程数,可直接通过JMeter内置的上下文API实现需求:
方法1:获取当前步骤所属线程组的活跃线程数
在需要统计的步骤同级添加JSR223预处理器/后置处理器,写入以下Groovy代码:
// 直接从上下文获取当前线程所属的线程组实例 def currentThreadGroup = ctx.getThreadGroup() // 读取实时活跃线程数 def activeThreadCount = currentThreadGroup.getNumberOfActiveThreads() // 存入JMeter变量供后续采样器、断言等组件调用 vars.put("current_group_active_threads", activeThreadCount.toString())
该方法无需依赖前置采样器,任意步骤执行时都可以拿到当前线程组的实时活跃数,完美兼容Stepping Thread Group、Ultimate Thread Group等第三方动态线程组。
方法2:获取所有线程组的总活跃线程数
如果需要统计测试计划内所有线程组的总活跃数,使用以下代码:
import org.apache.jmeter.engine.StandardJMeterEngine import org.apache.jmeter.threads.ThreadGroup def totalActive = 0 def testEngine = ctx.getEngine() if (testEngine instanceof StandardJMeterEngine) { def allGroups = testEngine.getThreadGroups() allGroups.each { group -> if (group instanceof ThreadGroup) { totalActive += group.getNumberOfActiveThreads() } } } vars.put("total_active_threads", totalActive.toString())
注意事项
- JSR223元件的语言请选择
groovy,相比其他脚本语言性能高10倍以上,不会影响压测性能 - 如果你需要在多个步骤复用统计逻辑,可以把JSR223元件放在线程组根目录,即可对线程组下所有步骤生效
内容的提问来源于stack exchange,提问作者Mats Johansson
相关产品推荐
相关产品推荐

