Jmeter BeanShell - 访问响应数据 - Beanshell错误?

时间:2017-02-21 21:27:10

标签: java jmeter beanshell

我的Beanshell Post Processor中有这段代码

String line;
String[] words;

line = SampleResult.getResponseMessage(); log.info(msg);

words  = line.split("*");

log.info("Here We are"); 

for (int i = 0; i < words.length; i++) {
  log.info(words[i]);
 }

这是我得到的错误

  

2017/02/21 14:23:31错误 - jmeter.util.BeanShellInterpreter:错误   调用bsh方法:eval源文件:内联评估: String line; String[] words; line = SampleResult.getResponseMessage(); log.inf . . . '' : Attempt to resolve method: getResponseMessage() on undefined variable or class name: SampleResult 2017/02/21 14:23:31 WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of:字符串行;串[]   话; line = SampleResult.getResponseMessage(); log.inf。 。 。 '':   尝试解决方法:未定义变量的getResponseMessage()   或类名:SampleResult

2 个答案:

答案 0 :(得分:2)

严格地说,要摆脱错误,您需要将SampleResult替换为prev

  

prev - (SampleResult) - 允许访问之前的SampleResult

source

所以要解决异常:

line = prev.getResponseMessage(); 
log.info(line);

您始终可以看到对象本身提供的变量列表:

enter image description here

但是,如果我理解正确,您希望从采样器获取数据而不是响应消息。因此,您可能希望使用getResponseDataAsString()代替getResponseMessage()

所有在一起:

line = prev.getResponseDataAsString(); 
log.info(line);

答案 1 :(得分:1)

  1. SampleResult可以这样使用
  2. ResponseMessage!=响应主体
  3. 因此,请使用以下方法之一

    • line = new String(data);
    • line = prev.getResponseDataAsString();
    • line = ctx.getPreviousResult().getResponseDataAsString());

    其中:

    另外考虑使用JSR223 PostProcessorGroovy language而不是Beanshell,因为Groovy更兼容Java,性能更好,并且具有良好的语言功能,这将使您的代码看起来更好,工作更好。有关详细信息,请参阅Groovy Is the New Black文章。