当前位置: 首页 > 知识库问答 >
问题:

JMeter-BeanShell后处理器

皮自明
2023-03-14

在日志中获取以下错误:

2020-06-24 13:23:51,091错误O.A.J.U.BeanShellInterpreter:调用bsh方法时出错:eval Sourced file:对://的内联求值以输出jmeter.log中的执行流,以帮助演示scr是如何执行的。..'':类型化变量声明:尝试解析未定义变量或类名上的方法:getName():sampler 2020-06-24 13:23:51,091 WARN o.a.j.e.BeanShellPostProcessor:BeanShell脚本中的问题:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件://的内联求值以输出JMeter.log中的执行流,以帮助演示scr是如何执行的。..'':类型化变量声明:尝试解析未定义变量或类名上的方法:getName():sampler 2020-06-24 13:23:51,154错误O.A.J.U.BeanShellInterpreter:错误调用bsh方法:eval Sourced file://的内联求值以输出jmeter.log中的执行流,以帮助演示scr是如何执行的。..'':类型化变量声明:尝试解析未定义变量或类名上的方法:getName():sampler 2020-06-24 13:23:51,154 WARN o.a.j.e.BeanShellPostProcessor:BeanShell脚本中的问题:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件://的内联求值以输出JMeter.log中的执行流,以帮助演示scr是如何执行的。..'':类型化变量声明:尝试解析未定义变量或类名上的方法:getName():sampler 2020-06-24 13:23:51,236错误O.A.J.U.BeanShellInterpreter:错误调用bsh方法:eval Sourced file://的内联求值以输出jmeter.log中的执行流,以帮助演示scr是如何执行的。..'':类型化变量声明:尝试解析未定义变量或类名上的方法:getName():sampler 2020-06-24 13:23:51,236 WARN o.a.j.e.BeanShellPostProcessor:BeanShell脚本中的问题:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件://的内联求值以输出JMeter.log中的执行流,以帮助演示scr是如何执行的。..'':类型化变量声明:尝试解析未定义变量或类名:sampler上的方法:getName()

下面是Beanshell后处理器中使用的代码。

import java.text.DecimalFormat;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

int tdNumber = ctx.getThreadNum();
int noThreads = ctx.getThreadGroup().getNumThreads();
long tdstart = ctx.getThread().getStartTime();
long tdEnd = ctx.getThread().getEndTime();
String respCode = ctx.getPreviousResult().getResponseCode();
String respCode = ctx.getPreviousResult().getResponseMessage();
String samplerName = sampler.getName();


Date date = new Date();
date.setDate(date.getDate());
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String formattedDate = df.format(date);

log.info("sampler::"+ sampleName +"....ThreadNo::"+ (tdNumber + 1) +" ....Starttime::"+ formattedDate +
"....StatusCode::" + respCode +"....TotalThreads::"+ noThreads +" ....Iterationno::"+vars.getIteration());

共有2个答案

江阳冰
2023-03-14

未定义的变量或类名:sampler

Beanshell后处理程序中没有sampler速记,您应该使用以下选项之一:

  • prev.getSampleLabel(false)
  • ctx.getCurrentSampler().getName()

还要注意,从JMeter3.1开始,您应该使用JSR223测试元素和Groovy语言编写脚本,因此请考虑在下次有机会时迁移到Groovy。

关于CTXPrev和朋友的更多信息:您应该与Groovy一起使用的前8名JMeter Java类

方韬
2023-03-14

转移到JSR223_PostProcessor,这是最佳实践,并且还包括sampler

强烈建议迁移到JSR223后处理器+Groovy,以获得性能、对新的Java特性的支持以及对BeanShell库的有限维护。

 类似资料:
  • 我如何使用beanshell后处理器来分析来自每个请求的数据?我需要分析请求,如果请求通过-写入文件,如果请求失败-写入其他文件。任何机构都可以为这种情况编写简单的示例脚本?

  • 如何更正此代码?谢谢

  • 我需要测试rest api发布JSON。我尝试使用JMeter通过BeanShell后处理器发布Json数据。但是BeanShell后处理器不工作或者我写不出正确的代码。 我的Json是:{“email”:“selin@xxx.com”,“password”:“123”} 你可以在下面的图片中看到我做了什么。

  • 问题内容: 有没有办法从一个BeanShell前置/后处理器到另一个BeanShell处理器 (它们在同一个线程组中) 引用变量? 如果我在HTTP Request下的BeanShell PreProcessor中创建一个String变量,那么我可以在同一HTTP Request下的BeanShell PostProcessor中使用或引用该变量。 我尝试通过以下方式访问此变量: + HTTP请求

  • 我有这样的简单代码- 但是,它不起作用,没有东西进入csv文件。我可以看到用log语句打印在日志文件中的数字。也没有错误。

  • > 下面有一个json响应数组,我正在将它放入Jmeter正则表达式提取器变量中。 在这里,我有JSON对象。 在JSON对象中,我们有不同的SKU和相应的数量。 我正在使用一个hashmap从CSV文件中读取值,并更新每个SKU的数量细节,但我的脚本无法将响应取到JMeter中的数组中。 最后,我将分享解析JSON数组时遇到的Jmeter代码和错误 我看到很多帖子建议groovy,我不知道如何使