我的BeanShell
PostProcessor
以:
result = ctx.getPreviousResult();
String data = result.getResponseDataAsString();
在LoopController
的第二个循环中,它会在日志中提供:
ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: set Variable assignment: data: Can't assign byte [] to java.lang.String
WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: set Variable assignment: data: Can't assign byte [] to java.lang.String
但是,如果我删除了String
声明,我就不会收到警告(因此使用它来解决)...即对类型不明确:)
data = result.getResponseDataAsString();
如果我在此行之前打印result.getResponseDataAsString().getClass().getName()
,我会获得java.lang.String
。
在JMeter中使用BeanShell
相当新,但非常有信心这就是问题所在。
同时,如果我在log.info
分配之前有String data = ...
个语句,它们将不会在第二个循环迭代中打印 - 这让我对该评估提出质疑。
如何理解/更正尝试的byte[]
作业?
供参考:这是我的测试计划:
基本上,每个采样器使用result.getResponseDataAsString()
来获取响应体,进行一些操作以“标准化”它,然后通过vars.put()
设置一个值。 BeanShell Assertion
使用vars.get()
检索这两个值,并相应地对它们进行比较FailureMessage
和Failure
。
注意:PostProcessor
都有同样的问题。
注意2:String data = new String( result.getResponseData() );
同样存在问题(即同样的错误)......并非我曾主张从String
创建byte[]
没有明确关于编码/字符集。