![](/img/trans.png)
[英]Jmeter: TCP Sampler error: 500 ReadException: Error reading from server, bytes read: 0
[英]Reading the Binary Data from JMeter sampler
尝试从JMeter采样器读取Binary数据响应,然后在BeanShlll Post Processor中反序列化它。
流程是,控制器首先将请求发送到Web服务,该服务返回二进制数据。 当我在JMeter中查看时,我看到了一些垃圾字符。
我需要将其转换为BeanShell脚本中的实际对象(我的自定义对象)。
这就是我尝试过的。 但是没有运气。 还是我正在尝试一些愚蠢的事情。 PS:刚接触IO的新手。
import java.io.ObjectOutputStream;
import com.package.MyClass;
MyClass myObj = new MyClass();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
myObj = ois.readObject();
这是行不通的。 它什么也没显示。 有什么帮助吗?
您确定readObject
方法可用于该二进制数据吗? 例如,不要发生StreamCorruptedException并且您的后处理器停止工作。
按照如何使用BeanShell指南
由于Beanshell是在Rhino引擎中执行的,因此除了检查jmeter.log文件是否有类似问题之外,没有其他选择可以看到问题所在:调用bsh方法并使用System.out.println(“ something”)或log.info(“ something ”)进入脚本失败的底部。
您没有办法验证后处理器是否成功,则必须查看日志和/或在末尾添加一些调试输出语句。
另一种有用的技术是用try/catch
包围代码
有关使用方法,请参见下面的示例。 如果“一切都很好”,则后处理器将把Successfully read data into myObj
打印Successfully read data into myObj
并输出到STDOUT中。 在相反的情况下,您会在此处看到相关的错误stacktrace。
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
try {
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Object myObj = ois.readObject();
ois.close();
System.out.println("Successfully read data into myObj");
} catch (Exception ex) {
ex.printStackTrace();
}
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.