我的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
答案 0 :(得分:2)
严格地说,要摆脱错误,您需要将SampleResult
替换为prev
。
prev - (SampleResult) - 允许访问之前的SampleResult
(source)
所以要解决异常:
line = prev.getResponseMessage();
log.info(line);
您始终可以看到对象本身提供的变量列表:
但是,如果我理解正确,您希望从采样器获取数据而不是响应消息。因此,您可能希望使用getResponseDataAsString()
代替getResponseMessage()
所有在一起:
line = prev.getResponseDataAsString();
log.info(line);
答案 1 :(得分:1)
因此,请使用以下方法之一
line = new String(data);
line = prev.getResponseDataAsString();
line = ctx.getPreviousResult().getResponseDataAsString());
其中:
data
是包含父Sampler响应数据的二进制表示的byte array prev
是当前SampleResult班级实例ctx
- 代表JMeterContext 另外考虑使用JSR223 PostProcessor和Groovy language而不是Beanshell,因为Groovy更兼容Java,性能更好,并且具有良好的语言功能,这将使您的代码看起来更好,工作更好。有关详细信息,请参阅Groovy Is the New Black文章。