You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter中获取线程名与取样器名并保存为变量

获取JMeter线程名和取样器名并保存为变量

嘿,我来帮你搞定这个问题!你已经成功拿到测试计划名了,现在获取线程名和取样器名其实很简单,之前没成功大概率是方法名拼写或者对象引用的小问题,下面给你详细的解决方案:

一、BeanShell后置处理器实现方案

在BeanShell后置处理器中,你不需要额外导入太多类,因为JMeter已经为我们提供了几个默认可用的上下文对象:ctx(JMeter上下文)和SampleResult(当前取样器的结果对象)。直接用它们就能拿到需要的信息:

完整代码如下:

// 获取测试计划名(保留你原来的代码)
import org.apache.jmeter.services.FileServer;
String testPlanName = FileServer.getFileServer().getScriptName();
vars.put("testPlanName", testPlanName);

// 获取当前线程的名称
String threadName = ctx.getThread().getThreadName();
vars.put("threadName", threadName);

// 获取当前取样器的名称
String samplerName = SampleResult.getSampleLabel();
vars.put("samplerName", samplerName);

关键说明:

  • 线程名:ctx.getThread().getThreadName() 是正确写法,你之前可能写成了小写的getThreadname(),Java方法名是驼峰式的,大小写错误会导致调用失败。
  • 取样器名:获取取样器名称的正确方法是SampleResult.getSampleLabel(),而不是你尝试的getSampleName()——这个方法并不存在。另外SampleResult在后置处理器中是默认可用的,不需要额外导入org.apache.jmeter.samplers.SampleResult类。

二、更推荐的JSR223后置处理器(Groovy)方案

现在JMeter官方更推荐使用JSR223后置处理器搭配Groovy语言,性能比BeanShell好很多,写法也更简洁:

// 获取测试计划名
def testPlanName = org.apache.jmeter.services.FileServer.getFileServer().getScriptName()
vars.put("testPlanName", testPlanName)

// 获取线程名
def threadName = ctx.getThread().getThreadName()
vars.put("threadName", threadName)

// 获取取样器名
def samplerName = SampleResult.getSampleLabel()
vars.put("samplerName", samplerName)

三、变量使用示例

现在你可以在邮件通知中直接组合这三个变量,比如:

"Test plan ${testPlanName} - Thread ${threadName} - Sampler ${samplerName} have received the response code ${responseCode}"

这样就能清晰展示每个测试环节的具体信息啦!

内容的提问来源于stack exchange,提问作者Eugene Truuts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:11:36