testing - vars.putObject 和 vars.getObject 是否在 jmeter 中消耗额外的内存

标签 testing groovy memory-leaks jmeter jsr223

我有一个看起来像这样的测试计划

Test plan
  Jsr223 sampler
  {
    def lst = [100 elements];
    vars.putObject("lst",lst);    
  }
  loop controller(100 times)
  {
    Http request
      preprocessor
      {
        lst = vars.getObject("lst");
      }
  }

现在,预处理器中的 lst 使用与 jsr223 采样器中 lst 相同的内存,还是创建新内存并使用。 Q2) 另一个问题是,预处理器中的 lst 内存是否在每次迭代时被清除,或者它是否为每次迭代创建新内存。

最佳答案

在您的设置中,您总是引用位于 JMeterVariables 中的同一对象类实例,它既不分配新的内存部分,也不在新的迭代期间释放它。

但是请注意,每个 JMeter 线程(虚拟用户) 都会在其 local storage 中包含此对象所以对于 1 个线程,你将有 1 个实例,对于 2 个线程 - 2 个实例。

因此,如果您有 > 1 个线程并在所有线程中使用相同的对象 - 最好使用 props 而不是 vars,根据 documentation :

Properties are not the same as variables. Variables are local to a thread; properties are common to all threads

如果你想手动清除对象使用vars.remove()在需要的地方发挥作用,例如:

vars.remove('lst')

为了减少内存消耗,您可以考虑将您的对象放入 CSV 文件并查找 CSV Data Set Config。它不会将整个文件加载到内存中并且具有灵活的 sharing options跨线程的值。

关于testing - vars.putObject 和 vars.getObject 是否在 jmeter 中消耗额外的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53497263/

相关文章:

testing - Flutter测试时如何找到Widget的 `text`属性?

hibernate - groovy.lang.MissingMethodException [GrailsHttpSession.createQuery()]

testing - 如何测试main.dart

android - 使用monkeytalk测试android应用程序,录音按钮被禁用

javascript - 似乎无法找到有关测试 Cycle.js 应用程序的资源

c# - 什么导致 .NET 中的内存碎片

c++ - 如何从最小堆 C++ 中释放内存

templates - 这个 Play 模板代码可以简化吗(避免 if/else 标签)?

Groovy 排序文档

java - 内存泄漏或者是预料之中的