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

JMeter BeanShell跨线程组修改变量报NumberFormatException求助

错误原因

你遇到的NumberFormatException报错由以下几个脚本编写错误导致:

  1. vars.put方法需要传入变量名、变量值两个参数,你编写的String ids3 = vars.put(${__intSum(2,-4)});仅传入一个参数,ids3未被正确赋值为空值。
  2. BeanShell中自定义的Java变量(比如你定义的ids2、ids3)不能直接通过${变量名}格式引用,JMeter解析该表达式时无法识别Java变量,会返回空字符串,转换数字时就抛出格式异常。
  3. 最后一行的vars.put中直接使用了未定义的ids变量,也会导致赋值失败。

正确实现方案

你需要的功能仅需少量代码即可完成,完全不需要调用__intSum函数:

  1. 你第一步将提取的id设置为全局属性的操作无需修改。
  2. 第二个线程组的BeanShell PreProcessor(更推荐使用性能更优的JSR223 PreProcessor,脚本逻辑完全兼容)替换为以下代码:
// 读取全局属性中的id值
String originId = props.get("id").toString();
// 转为整数后减2
int updatedId = Integer.parseInt(originId) - 2;
// 存入第二个线程组局部变量,变量名可自定义,此处用modified_id为例
vars.put("modified_id", String.valueOf(updatedId));

后续在第二个线程组内直接使用${modified_id}即可调用处理后的数值,该变量仅对第二个线程组生效,完全符合你的需求。

可选兼容逻辑

如果要避免id提取失败导致的空指针异常,可以增加判空逻辑:

Object idObj = props.get("id");
if (idObj != null) {
    String originId = idObj.toString();
    int updatedId = Integer.parseInt(originId) - 2;
    vars.put("modified_id", String.valueOf(updatedId));
} else {
    log.warn("全局属性id未成功提取,请检查第一个线程组的提取逻辑");
}

内容的提问来源于stack exchange,提问作者Veleslav Panov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:36:03