o.a.j.u.BeanShellInterpreter 错误:调用 bsh 方法时出错 - Jmeter 预处理器

问题描述 投票:0回答:1

需要帮助解决 Jmeter BeanShell 预处理器的问题,我使用下面的代码来获取变量数据并作为下一个 POST 请求传递,但它失败了,尽管我可以看到所有变量都被正确捕获。

请帮助确定导致问题的原因

int keys = Integer.parseInt(vars.get("getkeys_matchNr"));
StringBuilder requestBuilder = new StringBuilder();
requestBuilder.append("[");
for (int i = 1; i <= keys; i++) {
    requestBuilder.append(vars.get("getkeys_" + i));
    if (i != keys) {
        requestBuilder.append(",");
    }
}
requestBuilder.append("]");
sampler.getArguments().getArgument(0).setValue(requestBuilder.toString());

出现以下错误:

2023-11-01 12:51:12,275 错误 o.a.j.u.BeanShellInterpreter:调用 bsh 方法时出错:eval 源文件:内联求值:``int keys = Integer.parseInt(vars.get("getkeys_ . . . ''):尝试解析未定义变量或类名的方法:toString():out

尝试将 setValue 设置为不同的字符串 - "sampler.getArguments().getArgument(0).setValue(out.toString(0));"但也没用

jmeter beanshell
1个回答
0
投票

我在代码中没有看到任何

out
对象的声明,很可能是复制粘贴问题,尝试将
out
替换为
requestBuilder
,问题就会消失。

使用 Beanshell 也是某种形式的性能反模式,从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy 语言 进行脚本编写。

示例代码:

def requestBuilder = []
1.upto(vars.get('getkeys_matchNr') as int, { index ->
    requestBuilder.add(vars.get('getkeys_' + index))
})

def payload = new org.apache.jmeter.protocol.http.util.HTTPArgument('', new groovy.json.JsonBuilder(requestBuilder).toPrettyString(), '')
def arguments = sampler.getArguments()
arguments.addArgument(payload)
sampler.setArguments(arguments)

更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.