如何在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
相关产品推荐
相关产品推荐

