Как разобрать ответ JSON с помощью экстрактора JSON JMeter

Начиная с JMeter 3.0, гораздо проще извлекать данные из ответов JSON с помощью экстрактора переменных JSON. JSON - это чрезвычайно простой формат данных, который несколько лет назад пришел на смену XML.

Все большее количество REST API и серверов используют JSON в качестве основного формата обмена данными. Здесь мы будем использовать JMeter для анализа ответа JSON.

Если у вас не установлен JMeter, прочтите эту статью, в которой объясняется как установить JMeter в Mac OS .

Предположим, у нас есть следующий ответ JSON:

{
'store': {
'book': [

{


'category': 'reference',


'author': 'Nigel Rees',


'title': 'Sayings of the Century',


'price': 8.95

},

{


'category': 'fiction',


'author': 'Evelyn Waugh',


'title': 'Sword of Honour',


'price': 12.99

}
],
'bicycle': {

'color': 'red',

'price': 19.95
}
},
'expensive': 10 }

Чтобы проанализировать указанный выше JSON с помощью JMeter, нам нужно добавить JSON Extractor в наш план тестирования.

Щелкните правой кнопкой мыши План тестирования -> Добавить -> Постпроцессоры -> JSON Extractor.



Теперь мы должны увидеть следующее представление:

В поле выражений пути JSON мы можем вставить наш путь JSON для анализа ответа JSON.

Вот несколько примеров выражений Json Path, которые можно использовать для извлечения данных из документа Json, представленного выше:

+---------------------------------------+--------------------------------------------------------------+ | JSONPath





| Result










| +---------------------------------------+--------------------------------------------------------------+ | $.store.book[*].author


| The authors of all books






| | $..author




| All authors









| | $.store.*




| All things, both books and bicycles




| | $.store..price



| The price of everything






| | $..book[0,1]




| The first two books







| | $..book[:2]




| All books from index 0 (inclusive) until index 2 (exclusive) | | $..book[2:]




| Book number two from tail






| | $..book[?(@.isbn)]



| All books with an ISBN number





| | $.store.book[?(@.price < 10)]
| All books in store cheaper than 10




| | $..book[?(@.price <= $[‘expensive’])] | All books in store that are not “expensive”


| | $..book[?(@.author =~ /.*REES/i)]
| All books matching regex (ignore case)



| | $..*





| Give me every thing







| | $..book.length()



| The number of books







| +---------------------------------------+--------------------------------------------------------------+