Как получить карту из глобальных свойств jmeter в другом потоке - PullRequest
0 голосов
/ 04 марта 2019

Я использую Jmeter 5.0, где у меня есть фрагмент кода Java, написанный внутри JSR223 PostProcessor в одной группе потоков.Значения сохраняются внутри карт, и я могу просмотреть их в отладочном сэмплере.Код выглядит следующим образом -

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);

Теперь я хочу получить доступ к значениям этих 2 карт в другой группе потоков.Как это сделать ?Я попытался использовать препроцессор JSR223, где я написал код следующим образом -

import java.util.Map;
import java.util.HashMap;


Map gameTemplateIdMap = props.get("GamePlayHistoryMap");
Map payLevelDetailsMap = props.get("PayLevelDetailsMap");

Я не могу получить значения, сохраненные в предыдущем потоке. Может ли кто-нибудь помочь мне указать, где я мог ошибиться?

Сэмплер отладки 1-го потока -

GamePlayHistoryMap = {107 = 3387} HTTPResponse.parsers = htmlParser wmlParser cssParser PayLevelDetailsMap = {107 = {"priqQuantity": 0: "выиграть"выигрышный тип": 2, "призовое имя": "денежные средства", "описание": "рекламные денежные средства", "списочные ошибки": [], "isValid": true}, "isValid": true, "description": "$ 0.3", "externalPrizeID": NULL, "prizeTypeID": 2, "gameTemplateID": 0, "isNotifySocial" ложь "prizeValue": 0.3, "payMethodID": 1, "winProbability": 17,5, "celebrationLevel": NULL,»payMethod ": {" payMethodID ": 1," имя ":" CMS», "описание": "Счет", "listofErrors": [], "IsValid": правда}, "listofErrors": [], "payLevelTemplateID": 41170, "isNotifySignage": true, "position": 3, "celebLevelID": 1}}

Отладчик 2-го потока отладки -

GamePlayHistoryMap = {107 =} HTTPResponse.parsers = htmlParser wmlParser cssParser PayLevelDetailsMap = {107 =}

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я сделал это, используя bsh.shared свойство BeanShell Sampler.Код группы 1-го потока, который заполняет карту, выглядит следующим образом -

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;

Код группы 1-го потока, который выбирает карту, выглядит следующим образом -

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, просто нужно выяснить, как.Мне также нужно выяснить, как объявить карту в 1-й группе потоков глобально, чтобы каждый раз, когда поток выполнялся, добавлялись значения карты.На данный момент каждый раз карта инициализируется заново, когда поток запускается более одного раза.Будем весьма благодарны за любые указания, как этого добиться.

Спасибо

0 голосов
/ 04 марта 2019

Вы уверены, что ваша 2-я группа потоков выполняется после 1-й группы потоков?Единственная причина сбоя, о которой я могу думать, это то, что вы пытаетесь прочитать значение из карты в то время, когда оно еще не было определено.

Проверьте файл jmeter.log на наличие подозрительных записей.Если я прав, и в этом случае вы можете:

  1. Галочка Run Thread Groups consecutively на План тестирования Уровень

    enter image description here

  2. Или используйте Плагин связи между потоками , чтобы заблокировать 2-ю группу потоков, пока значение карты не будет установлено в 1-й группе потоков
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...