我有一个看起来像这样的测试计划
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/