【问题标题】:How to store a custom object in JSR223?如何在 JSR223 中存储自定义对象?
【发布时间】:2021-03-31 20:15:39
【问题描述】:

我在 Jmeter 中将我的自定义侦听器设置为 JSR223 侦听器。

目前它在测试运行期间将记录附加到文本文件然后调用侦听器(我认为这对测试准确性不利),但我想收集所有数据(由侦听器)并在结束后将其保存在一个和平中测试(在拆解部分)

Google 找到了很多存储单个变量(如字符串)的方法,但如果我想存储大量复杂的数据集,这是不可接受的。是否可以通过 JSR223 以某种方式存储我的自定义对象的 Java 数组(或类似的东西)作为全局变量(在设置阶段的某处创建),可用于每个 JSR223 lisneners/Samplers 等?

如果我制作了“datakeeper”单例,它会按我的预期工作吗(我不知道 GC 对 JSR223 是如何工作的,它是否会清理它,以及它是否可用于其他 JSR223 实例)并且它是否适合我的目的?

【问题讨论】:

    标签: jmeter jsr223


    【解决方案1】:

    只需使用 props 简写,它代表正常的 Properties,它依次是:

    1. 全局,可在其他线程组和此JVM 实例中的任何位置访问
    2. 可以存储任何你想要的Object,而不仅仅是字符串

    所以如果你这样做:

     props.put('myObject', yourObject)
    

    在设置线程组中

    您将能够在其他任何地方获得 props.get('myObject') 的值

    有关此 props 和其他 JMeter API 简写的更多信息 - Top 8 JMeter Java Classes You Should Be Using with Groovy

    【讨论】:

    • 我可以通过 put/get 存储自定义对象并不明显。谢谢,它有效。
    【解决方案2】:

    您问题中的这句话大量复杂的数据集敲响了警钟。在内存中存储如此大量的数据会对您的执行产生不利影响。您可以预期线程会因OutOfMemoryException 而意外死亡。此外,如果 JMeter 崩溃,您会丢失在此之前捕获的所有统计信息。您可以调整堆设置,但这只是一个补丁工作,并不是您问题陈述的真正解决方案。

    您可以继续使用当前方法保存到本地文件。

    【讨论】:

    • 我认为我没有足够的数据来获取 OOM。 “大量复杂的数据集”是一个小小的夸张。无论如何,文件操作不是那么快(如内存操作),而且我不确定从并行线程中写入一个文件是一个好主意(如果我正确理解为每个请求完成时调用的侦听器,那么可能尝试一次写入一个文件)
    • 您仍然有因 jmeter 挂起/崩溃而丢失数据的风险。 __StringToFile jmeter 的内置函数是线程安全的
    猜你喜欢
    • 2011-01-19
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多