Хотя JSONPath Extractor не обеспечивает hasSize
функцию, которую он все еще может быть сделано.
Данный пример JSON из ответа ЛПР Ubik-INGENIERIE, вы можете получить несколько матчей на book
массив по крайней мере, 2-мя способами:
1. Easiser (но хрупкий) способ - с помощью Regular Expression Extractor.
Как вы можете видеть, есть 4 входа для category
как:
{ "category": "reference",
{ \"category\": \"fiction\"
...
Если добавить Regular Expression Extractor настроен следующим образом:
Это будет захватывать все category
и номера возвратных совпадений, как указано ниже:
Таким образом, вы сможете использовать эту переменную ${matches_matchNr}
там, где это необходимо.
Этот подход прост и прост в применении, но он очень уязвим для любых изменений в формате отклика. Если вы ожидаете, что данные JSON могут измениться в обозримом будущем, переходите к следующему варианту.
2. Труднее (но более стабильный) способ - вызов метода JsonPath из Beanshell PostProcessor
JMeter имеет BeanShell механизм расширения сценариев, который имеет доступ ко всем переменным/свойства в объеме, а также доступ к нижележащей JMeter и 3 API-интерфейсы зависимостей. В этом случае вы можете позвонить в библиотеку JsonPath (которая находится под капотом JsonPath Extractor) непосредственно из Beanshell PostProcessor.
import com.jayway.jsonpath.Criteria;
import com.jayway.jsonpath.Filter;
import com.jayway.jsonpath.JsonPath;
Object json = new String(data);
List categories = new ArrayList();
categories.add("fiction");
categories.add("reference");
Filter filter = Filter.filter(Criteria.where("category").in(categories));
List books = JsonPath.read(json, "$.store.book[?]", new Filter[] {filter});
vars.put("JSON_ARRAY_SIZE", String.valueOf(books.size()));
Код выше оценивает JSONPath экспрессию $.store.book[?]
против ответа родительского пробоотборника, подсчитывает соответствует число и сохраняет его в ${JSON_ARRAY_SIZE}
JMeter Variable
, который впоследствии может быть повторно использован в случае, если пункт или утверждение ,
Ссылки:
Проверить этот ответ: http://stackoverflow.com/a/40926919/1306012 вы можете посмотреть для этого. Используйте переменную «* _matchNr». –