Kako raščlaniti JSON odgovor pomoću JMeterovog JSON ekstraktora

Od JMeter 3.0, daleko je lakše izvući podatke iz JSON odgovora pomoću ekstraktora varijabli JSON. JSON je izuzetno jednostavan format podataka koji je XML preuzeo prije nekoliko godina.

Sve veći broj REST API-ja i poslužitelja koristi JSON kao svoj primarni format razmjene podataka. Ovdje ćemo koristiti JMeter za raščlanjivanje JSON odgovora.

Ako nemate instaliran JMeter, pročitajte ovaj članak koji objašnjava kako instalirati JMeter na Mac OS .

Pretpostavimo da imamo JSON odgovor kako slijedi:

{
'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 }

Da bismo raščlanili gornji JSON s JMeterom, moramo dodati JSON Extractor u naš plan ispitivanja.

Desnom tipkom miša kliknite Test plan -> Dodaj -> Postprocesori -> JSON Extractor



Sada bismo trebali vidjeti sljedeći pogled:

U polje Izrazi putanje JSON možemo umetnuti našu JSON putanju za raščlanjivanje JSON odgovora

Evo nekoliko primjera izraza Json Path koji se mogu koristiti za izdvajanje podataka iz gore izloženog Json dokumenta:

+---------------------------------------+--------------------------------------------------------------+ | 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







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