【问题标题】:Reading the Binary Data from JMeter sampler从 JMeter 采样器读取二进制数据
【发布时间】:2023-03-18 03:38:01
【问题描述】:

尝试从 JMeter 采样器读取二进制数据响应并在 BeanShlll 后处理器中对其进行反序列化。

流程是,控制器首先向webservice发送请求,webservice返回二进制数据。 当我在 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();

它不起作用。它没有显示任何东西。 有什么帮助吗?

【问题讨论】:

    标签: java io jmeter binary-data beanshell


    【解决方案1】:

    您确定readObject 方法适用于该二进制数据吗?例如,不会发生 StreamCorruptedException 并且您的后处理器停止工作。

    根据如何使用BeanShell 指南

    由于 Beanshell 是在 Rhino 引擎中执行的,除了检查 jmeter.log 文件是否有类似以下内容之外,没有其他选项可以查看问题所在:Error invoking bsh method and using System.out.println(“something”) or log.info (“某事”)以找出脚本失败的原因。

    您无法验证您的后处理器是否成功,您必须查看日志和/或在末尾添加一些调试输出语句。

    另一种有用的技术是用try/catch包围你的代码

    请参阅下面的示例了解如何使用。在“一切正常”的情况下,后处理器会将Successfully read data into myObj 打印到 STDOUT 中。在相反的情况下,您将在那里看到相关的错误堆栈跟踪。

        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();
        }
    

    希望这会有所帮助。

    【讨论】:

    • 我用 readObjext 来做类似的事情,它可以工作。只是在这种情况下不是。谢谢
    • jmeter.log 说什么?任何与 beanshell 相关的错误?当您的代码包装到 try/catch 块中时,stdout 中是否有任何异常? MyClass jar 在 JMeter 类路径中吗?
    • 它只是没有显示任何东西。即使尝试/捕获。现在,我只是将响应保存到一个文件并使用 InputStream 读取该文件。它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多