Jmeter:如何初始化映射一次并将其共享给线程组中的所有线程
Jmeter : How to initialize map once and share it for all threads in a thread group
我的 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);
而且我必须将它用于不同的 threads.Can 谁能帮我解决这个问题?
如果您需要在多个线程之间共享此类内容,请使用 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;
}
}
根据您用于编写脚本的测试元素,可能有 2 个选项:
如果您使用 Beanshell Sampler - the easiest option is using bsh.shared 命名空间作为
在第一个线程组中:
Map myMap1 = new HashMap();
myMap1.put("foo","bar");
bsh.shared.myMap = myMap1;
在第二个线程组中:
Map myMap1 = bsh.shared.myMap;
log.info(myMap1.get("foo"));
更多"generic" 方法是使用 JMeter Properties。 JMeter Properties 的当前实例的 shorthand 在任何启用脚本的测试元素(JSR223 Sampler、BSF Sampler 等)中作为 props
可用,它基本上是 java.util.Properties class 因此它有 put() 方法接受任意 Java 对象作为值。所以
在第一个线程组中:
Map myMap1 = new HashMap();
myMap1.put("foo","bar");
props.put("myMap", myMap1);
在第二个线程组中:
Map myMap1 = props.get("myMap");
log.info(myMap1.get("foo"));
我的 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);
而且我必须将它用于不同的 threads.Can 谁能帮我解决这个问题?
如果您需要在多个线程之间共享此类内容,请使用 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;
}
}
根据您用于编写脚本的测试元素,可能有 2 个选项:
如果您使用 Beanshell Sampler - the easiest option is using bsh.shared 命名空间作为
在第一个线程组中:
Map myMap1 = new HashMap(); myMap1.put("foo","bar"); bsh.shared.myMap = myMap1;
在第二个线程组中:
Map myMap1 = bsh.shared.myMap; log.info(myMap1.get("foo"));
更多"generic" 方法是使用 JMeter Properties。 JMeter Properties 的当前实例的 shorthand 在任何启用脚本的测试元素(JSR223 Sampler、BSF Sampler 等)中作为
props
可用,它基本上是 java.util.Properties class 因此它有 put() 方法接受任意 Java 对象作为值。所以在第一个线程组中:
Map myMap1 = new HashMap(); myMap1.put("foo","bar"); props.put("myMap", myMap1);
在第二个线程组中:
Map myMap1 = props.get("myMap"); log.info(myMap1.get("foo"));