Arrays Jmeter:如何在BeanShell后处理器中创建一个数组,并使它在其他线程组中可用?

Arrays Jmeter:如何在BeanShell后处理器中创建一个数组,并使它在其他线程组中可用?,arrays,jmeter,beanshell,post-processing,Arrays,Jmeter,Beanshell,Post Processing,有人知道如何在BeanShell后处理器中创建一个数组并使它在其他线程组中可用吗 我已经搜索了一段时间,但我没有设法解决这个问题 谢谢以下是我的建议: HTTP请求有一个正则表达式提取器,用于从请求中提取XPTO变量。然后,BeanShell后处理器将数据保存到CSV文件: String xpto_str = vars.get("XPTO"); log.info("Variable is: " + xpto_str); f = new FileOutputStream("/tmp/xptos.

有人知道如何在BeanShell后处理器中创建一个数组并使它在其他线程组中可用吗

我已经搜索了一段时间,但我没有设法解决这个问题


谢谢

以下是我的建议:

HTTP请求有一个正则表达式提取器,用于从请求中提取XPTO变量。然后,BeanShell后处理器将数据保存到CSV文件:

String xpto_str = vars.get("XPTO");
log.info("Variable is: " + xpto_str);

f = new FileOutputStream("/tmp/xptos.csv", true);
p = new PrintStream(f); 
this.interpreter.setOut(p); 
print(xpto_str + ",");
f.close();
然后,在第二个线程组中,我添加了一个CSV数据集配置,在其中我从文件中读取变量。这真的很简单,只需阅读指南()


谢谢

无需通过写入和读取文件来完成。Beanshell扩展机制足够智能,可以在没有临时第三方实体的情况下处理它

简短回答:bsh.shared名称空间

长答覆:

假设以下测试计划结构:

Thread Group 1 
    Beanshell Sampler 1
Thread Group 2
    Beahshell Sampler 2
将以下Beanshell代码放入
Beanshell取样器1

Map map = new HashMap();
map.put("somekey","somevalue");
bsh.shared.my_cool_map = map;
下面是比恩希尔取样器2的

Map map = bsh.shared.my_cool_map;
log.info(map.get("somekey"));
运行它并查看jmeter.log文件。你应该看到类似的东西

2014/01/04 10:32:09 INFO  - jmeter.util.BeanShellTestElement: somevalue

参考资料:

  • (摘自JMeter最佳实践)
  • 向导

  • 如果需要单个值,则必须使用用户定义的变量。如果您需要阵列,那么我认为只有一种方法:将值保存到csv文件中,在其他预处理器中读取您的csv。你能解释一下你的意图吗?谢谢你的回答。我想保存在循环控制器中创建的随机编号的id,并在另一个线程组中使用这些id。对于循环的每一次迭代,我都想在数组中附加一个id。你可以用下一种方法来做:但是我更喜欢读CSV。看起来我没有其他选择。我将尝试CVS方法。非常感谢。是否可以使用这种方法(可能使用线程id作为键…)迭代槽值?在我的解决方案中,我可以使用CSV数据集配置轻松实现这一点。THNAK在Map的情况下,它有键集和值集合,您可以将它们保存到JMeter变量并馈送到每个ControllerThanks Dmitri。下次我会试试,看看它是如何工作的。这里需要的是Jmeter的属性:为什么不使用属性?属性变量可以跨所有线程组访问。就负载使用而言,写入和读取文件需要花费大量cpu时间。