JMeter 线程编号 __threadNum 获取不到

场景:

在 BeanShell PreProcessor 中,使用 vars.get("__threadNum") 获取不到当前线程数,如:

import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.engine.util.CompoundVariable;
 
// 获取当前线程编号
String threadNum = JMeterUtils.getPropDefault("__threadNum", "0");
System.out.println("Current Thread Number: " + threadNum);

 

// 直接引用内置函数
String threadNum = org.apache.jmeter.functions. __BeanShellFunction.evaluate("${__threadNum}");
System.out.println("Current Thread Number: " + threadNum);

 

String threadNum = vars.get("__threadNum"); // 直接获取内置变量的值。这种方式在现代JMeter版本中通常不是最佳实践。
System.out.println("Current Thread Number: " + threadNum); // 这将输出线程编号。

 

String threadNum = vars.get("${__threadNum}"); // 更推荐使用这种方式。
System.out.println("Current Thread Number: " + threadNum); // 这将输出线程编号。

 

尝试直接在请求入参中直接使用 {__threadNum} 是可以获取到正确的值的。

处理:

在 HTTP Request 新增一个 User Parameter , 新增一个参数:threadNum - {__threadNum} 在保存线程编号;

再在 BeanShell PreProcessor 中,通过

int threadNum = Integer.parseInt(vars.get("threadNum"));

就可以正常获取到了。

 

posted @ 2025-02-25 14:17  learcher  阅读(98)  评论(0)    收藏  举报