我正在使用Jmeter 5.0,其中我在一个线程组的JSR223 PostProcessor中编写了一段Java代码。这些值已存储在地图中,我可以在Debug Sampler中查看它。代码如下-
import java.util.Map;
import java.util.HashMap;
Map gamePlayHistoryMap = new HashMap();
gamePlayHistoryMap.put(vars.get("playerId"), vars.get("GameplayHistoryId"));
props.put("GamePlayHistoryMap", gamePlayHistoryMap);
Map payLevelDetailsMap = new HashMap();
payLevelDetailsMap.put(vars.get("playerId"), vars.get("PayLevelDetails"));
props.put("PayLevelDetailsMap", payLevelDetailsMap);
现在,我想访问不同线程组中的这两个映射的值。怎么做 ?我尝试使用JSR223 PreProcessor编写如下代码-
import java.util.Map;
import java.util.HashMap;
Map gameTemplateIdMap = props.get("GamePlayHistoryMap");
Map payLevelDetailsMap = props.get("PayLevelDetailsMap");
我无法获取上一个线程中存储的值。有人可以帮助我指出我可能在哪里出错了吗?
第一个线程调试采样器-
GamePlayHistoryMap = {107 = 3387} HTTPResponse.parsers = htmlParser wmlParser cssParser PayLevelDetailsMap = {107 = {“ prizeQuantity”:0,“ prizeType”:{“ prizeTypeId”:2,“ prizeName”:“现金”,“描述”:“促销 Cash“,” listofErrors“:[],” isValid“:true},” isValid“:true,” description“:” $ 0.3“,” externalPrizeID“:null,” prizeTypeID“:2,” gameTemplateID“:0,” isNotifySocial“:false,” prizeValue“:0.3,” payMethodID“:1,” winProbability“:17.5,” celebrationLevel“:null,” payMethod“:{” payMethodID“:1,” name“:” CMS“,” description “:”帐户“,” listofErrors“:[],” isValid“:true},” listofErrors“:[],” payLevelTemplateID“:41170,” isNotifySignage“:true,”位置“:3,” celebrationLevelID“:1 }}
第二线程调试采样器-
GamePlayHistoryMap = {107 =} HTTPResponse.parsers = htmlParser wmlParser cssParser PayLevelDetailsMap = {107 =}
答案 0 :(得分:0)
您确定在第一个线程组之后执行您的第二个线程组吗?我能想到的唯一失败原因是,您试图在尚未定义时从map读取值。
检出jmeter.log file中是否有可疑条目。如果我是对的,那么您可以:
在Test Plan级上勾选Run Thread Groups consecutively
答案 1 :(得分:0)
我使用BeanShell Sampler的 bsh.shared 属性进行了此操作。填充地图的第一个线程组代码如下-
import java.util.Map;
import java.util.HashMap;
Map gamePlayHistoryMap = new HashMap();
Map payLevelDetailsMap = new HashMap();
gamePlayHistoryMap.put(vars.get("playerId"), vars.get("GameplayHistoryId"));
bsh.shared.gphMap = gamePlayHistoryMap;
payLevelDetailsMap.put(vars.get("playerId"), vars.get("PayLevelDetails"));
bsh.shared.pldMap = payLevelDetailsMap;
获取地图的第二线程组代码如下-
import java.util.Map;
import java.util.HashMap;
Map myMap1 = bsh.shared.gphMap;
vars.put("GamePlayHistoryId", myMap1.get(vars.get("playerId")));
log.info(myMap1.get(vars.get("playerId")));
Map myMap2 = bsh.shared.pldMap;
vars.put("PayLevelDetails", myMap2.get(vars.get("playerId")));
log.info(myMap2.get(vars.get("playerId")));
当然我认为这也可以使用JSR223元素完成,只需要弄清楚如何做即可。我还需要弄清楚如何全局地在第一个线程组中声明该映射,以便每次线程运行该映射的值时都会被附加。到目前为止,每次线程多次运行时,都会重新初始化映射。任何实现此目标的指针将不胜感激。
谢谢