Моя конечная цель - получить строку из списка, который создается динамически из ответа JSON. У меня проблемы с вызовом значения из списка, созданного во внешнем скрипте BeanShell. Внешний скрипт считывает ответ JSON и создает список из отфильтрованного ответа.
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Filter;
try{
String json = new String(prev.getResponseDataAsString());
List allPositiveAffects = JsonPath.read(json, "$.affectTags[?(@.value > 0.0)].key", new Filter[]{});
vars.putObject("allPositiveAffects",allPositiveAffects);
log.info("allPositiveAffects: " + allPositiveAffects);
int positiveAffectCount = allPositiveAffects.size();
vars.put("positiveAffectCount",Integer.toString(positiveAffectCount));
} catch (Throwable ex){
log.error("Error:\n", ex);
}
allPositiveAffects
возвращает ожидаемые значения, поэтому теперь я хочу получить одно из этих значений в следующем сообщении JSON POST.
Моя тестовая установка Jmeter:
- Thread Group
+ JSON GET request
- BeanShell PostProcessor
+ JSON POST request
Попытка получить значение от allPositiveAffects
оказалась не такой простой задачей, как вызов allPositiveAffects.get(n)
, как я могу, в моем сценарии BeanShell.
Я не придумал простого способа получить содержимое списков. Я что-то упускаю? Я пробовал несколько разных вещей в своем JSON POST request
. Последнее существо:
//json POST data
{
"entries":[
"id": -1,
"key": "${__BeanShell(${allPositiveAffects}.get(1))}"]
}
Что возвращает следующую ошибку:
java.lang.ClassCastException: net.minidev.json.JSONArray cannot be cast to java.lang.String
Любая помощь в решении или обходном пути будет принята с благодарностью. Для меня было бы намного проще иметь возможность вызывать список вместо создания различных переменных.