JMeter的BeanShell断言中,访问的变量值中有[或双引号等特殊符号,导致运行出错

本文介绍了在使用JMeter时遇到的变量访问问题及解决方法。当尝试直接访问空数组或空字符串变量时,可能会出现错误提示。为了避免这些错误,可以通过JMeter的vars.get方法将变量转换为Java变量进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有2个变量,变量var1内容为[],变量var2内容为""。

若直接访问${var1},${var2},符号[会报错,错误提示:

BeanShell断言 : org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval In file: inline evaluation of: ``(代码) . . .'' Encountered "[" at line 5, column 4.

若访问"${var1}","${var2}",双引号""会报错,错误提示:

BeanShell断言 : org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval In file: inline evaluation of: ``(代码) . . . '' Encountered "\"\"" at line 6, column 27.

解决方法是:

不要通过${var1}的方式访问,通过vars.get("var1")的方式将JMeter的变量转化为Java变量,再操作:

String tmp1 = vars.get("var1");
String tmp2 = vars.get("var2");
if(! tmp1.equals(tmp2)){
Failure = true;
FailureMessage += "\r\nvar1=" + tmp1 + ", var2=" + tmp2;
}


### 使用 JMeter BeanShell 后置处理器修改变量值JMeter 中,BeanShell 后置处理器可以用于执行自定义脚本逻辑,在采样器之后运行。这使得可以在测试过程中动态地处理和修改变量。 #### 获取并设置线程组内的局部变量 为了访问更改当前线程中的局部变量,`vars` 对象提供了相应的方法: - `vars.get(String key)` 方法用来获取指定名称的变量值;如果该键对应的变量不存在,则返回 null[^1]。 - 若要更新现有变量将新值赋给某个特定名字的空间内,可调用 `vars.put(String key, String value)` 来实现这一点。 下面是具体的代码实例展示如何通过 BeanShell 脚本来改变名为 "exampleVar" 的变量的内容: ```java // 读取现有的 exampleVar 者初始化它为空字符串 String oldValue = vars.get("exampleVar") != null ? vars.get("exampleVar") : ""; // 打印旧值以便调试目的 log.info("Old Value of 'exampleVar': " + oldValue); // 设置新的 variableValue 给 exampleVar String newValue = "new_value"; vars.put("exampleVar", newValue); ``` 这段脚本首先尝试从 `vars` 集合中检索已存在的 `"exampleVar"` 变量,并打印其原始值作为日志记录的一部分。接着,将一个新的字符串 `"new_value"` 存储回同一个位置覆盖之前的值。 对于希望在整个测试计划范围内共享的数据(即跨多个线程),应该考虑使用属性而不是本地变量。可以通过如下方式完成此操作: ```java // 将 thread-specific 属性提升至全局级别 props.setProperty("globalExampleProp", "globallyAccessibleValue"); ``` 这里展示了怎样利用 `${__setProperty}` 函数配合 BeanShell 实现相同的效果[^5]: ```java bsh.args[0]="cookie_token"; // 参数传递给 __setProperty 函数的第一个参数名 bsh.args[1]=vars.get("token"); // 第二个参数是要保存的实际数据 ${__setProperty(bsh.args[0], bsh.args[1])}; ``` 上述例子说明了当需要把某些信息暴露成全局可用资源所采取的做法——先捕获目标数据存入临变量里,再经由内置函数将其转换为持久化形式供后续环节引用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值