我的 j-meter测试计划中有一个线程组,我想预先初始化两个地图。像
java.util.HashMap myMap1 = new java.util.HashMap();
myMap1.put("foo1","bar1");
myMap1.put("foo2","bar2");
java.util.HashMap myMap2 = new java.util.HashMap();
myMap2.put("mykey",myMap1);
我必须将它用于不同的线程。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
根据您用于编写脚本的测试元素,可能有两个选项:
如果您使用Beanshell Sampler - 最简单的选项是使用bsh.shared命名空间
在第一个线程组中:
Map myMap1 = new HashMap();
myMap1.put("foo","bar");
bsh.shared.myMap = myMap1;
在第二个线程组中:
Map myMap1 = bsh.shared.myMap;
log.info(myMap1.get("foo"));
更多“通用”方式是使用JMeter属性。在任何支持脚本的测试元素(JSR223采样器,BSF采样器等)中,JMeter属性的当前实例的简写形式为props
,它基本上是java.util.Properties类的实例,因此它已放置()接受任意Java Object作为值的方法。所以
在第一个线程组中:
Map myMap1 = new HashMap();
myMap1.put("foo","bar");
props.put("myMap", myMap1);
在第二个线程组中:
Map myMap1 = props.get("myMap");
log.info(myMap1.get("foo"));
答案 1 :(得分:0)
如果您需要在多个线程之间共享此类内容,请转到Singleton Object。由于单个对象将在所有线程之间共享,因此所有线程都将看到相同的更改。
有关更多说明,请参阅以下代码段: -
import java.util.HashMap;
public class SingletonMap {
private HashMap myMap1 = null;
private HashMap myMap2 = null;
private static volatile SingletonMap singletonMapObj = null;
private SingletonMap(){
myMap1 = new HashMap();
myMap2 = new HashMap();
myMap1.put("foo1","bar1");
myMap1.put("foo2","bar2");
myMap2.put("mykey",myMap1);
}
public static SingletonMap getSingletonMap(){
if(singletonMapObj == null){
new SingletonMap();
}
return singletonMapObj;
}
}