Mastering JSON Extraction in Apache JMeter for Effective API Testing
Tags: jsonextraction, jmeter, luxoft, apitesting
Published: 2023-08-16 10:43:11

#JsonExtraction # Jmeter # Luxoft # APItesting #PerformanceTesting
#Xpath

Working with Luxoft for over a year, I have gained invaluable experience in my 11+ years of overall professional journey. The culture of knowledge sharing at Luxoft not only fosters continuous learning but also plays a vital role in our collective success.
In today’s fast-paced software development industry, ensuring the optimal performance of your product is paramount. However, as the sole tester on your project or even within the entire company, selecting the right performance testing or API  tool can feel overwhelming. With a vast array of options available, making an informed choice is crucial.  I will provide a step-by-step guide to help you become familiar with JMeter and successfully execute your first performance test /API test . 
I have had the opportunity to work extensively on performance projects using Jmeter where I have learned and used various JSON and Xpath exactor in my project .  
Now, let’s dive into the process of functional testing REST APIs and uncover the power of Apache JMeter in conjunction with a JSON extractor for parsing responses.

By the end of this blog post, you will have a good understanding of how to perform functional testing on REST APIs with JSON responses using Apache JMeter and leverage the JSON extractor to retrieve and manipulate data efficiently.

Configure the JSON Extractor in JMeter to extract data from JSON responses. Define JSON Path expressions to target specific elements within the JSON structure, and store the extracted values in variables for later use.


Understanding JSON and Its Relationship with JMeter:
JSON, short for JavaScript Object Notation, is a widely adopted data format for representing structured information. On the other hand, JMeter is an open-source performance testing tool developed by the Apache Software Foundation, primarily utilized for load testing, stress testing, and performance assessment of web applications. JSON and JMeter are closely intertwined in the context of web services and APIs. Modern web applications often communicate with clients or other services using JSON-formatted data. JMeter comes equipped with built-in support for working with JSON data during performance testing. Let's explore how JSON and JMeter are intertwined:

**JSON Extractor:** JMeter provides a JSON Extractor post-processor element that allows you to extract specific data from JSON responses. With the JSON Extractor, you can define JSON path expressions to extract values from JSON responses and store them in variables for further use in your test scripts.

**JSON Request:** JMeter allows you to send HTTP requests with JSON payloads. You can use the HTTP Request sampler to send POST or PUT requests with JSON data as the request body. This is useful for testing APIs that expect JSON data as input.

**JSON Assertion:** JMeter provides a JSON Assertion element to validate JSON responses. You can specify JSON path expressions to extract specific values from the response and define assertions based on expected values or patterns. This helps in verifying the correctness of the JSON responses during testing.

**JSON Pre-Processor:** JMeter offers a JSON Pre-Processor element that allows you to manipulate JSON data before sending it as part of an HTTP request. This can be useful for dynamically modifying JSON payloads based on test scenarios or test data.

**Exploring JSON Extractor Expressions**

- Extracting a Single Value
- Extracting a Value from a Nested Object
- Extracting Multiple Values
- Extracting Values Using Filters
- Extracting values based on a condition
- Extracting specific array elements
- Extracting values from multiple objects with the same key
- Extracting values using a wildcard
- Extracting values using regular expressions

In JMeter, you can extract JSON values or objects using various methods. Here are some of the ways you can extract JSON data in JMeter:

Sample JSON: 
{
  "name": "Ujwala",
  "age": 30,
  "user": {
    "email": "ujwala@gmail.com",
    "name": "Ujwala bothe"
  },
  "names": ["Ujwala", "Neha", "John"],
  "users": [
    {
      "name": "Ujwala",
      "age": 20,
      "domain": "IT",
      "email":"ujwala@gmail.com"
    },
    {
      "name": "Neha",
      "age": 40,
      "domain": "SALES",
      "email":"neha@gmail.com"
    },
    {
      "name": "Sneha",
      "age": 50,
      "domain": "ADMIN",
      "email":"sneha@gmail.com"
    }
  ]
}

**Extracting a Single Value:**

JSON Path: $ .name or $.age


Extracting Value from a Nested Object:
You can specifiy the path to desire value e.g user's email using dot(.) notation to extarct a value from multiple object which in nested object . 
For example, if your JSON response contains a nested object structure like this:


JSON Path: $.users.email or $.users.name

**Extracting an Array of Values:**

IF JSON contains n values i.e a array of object then you can you index i.e 1st for 2nd element or 3rd for 4th element  or * to retreieve all the values for the attribute. 
 For example, if your JSON response contains an array of names like this:


Extract the name: $ .names[0]
Extract all names: $ .names[*]
Extracting Multiple Values:

JSON Path: $.name;$.age

**Extracting Values Using Filters:**

You can use filters to extract specific values based on certain conditions. For example, if your JSON response contains an array of objects where each object has a “domain” field, you can use a filter to extract objects with a specific category. The following JSON Path expression extracts objects with the category “IT”:

JSON Path: $[?(@.domain=='IT')]
Extracting values based on a condition:

JSON Path Expression: $[?(@.age>50].name
This expression retrieves the names of all objects in the JSON response where the “age” field is greater than 50.

**Extracting specific array elements:**

JSON Path Expression: $.employees[0].name
This expression retrieves the value of the “name” field from the first object within the “employees” array in the JSON response.

**Extracting values from multiple objects with the same key:**

Extracts all values of the “Name” element from the entire JSON structure, regardless of their location.

JSON Path: $..name
**Extracting values using a wildcard:**

This expression extracts the values of the “domain” from all levels of the JSON structure using a wildcard.

JSON Path: $..[*].domain

**Extracting values using regular expressions:**

This expression extracts values where the “Name” matches a specific regular expression pattern.

JSON Path: $..[?.name=~/pattern)]

JSON Path expressions commenly used in JMeter’s JSON Extractor.

You can also combine two three expressions and to make final json extratcor path accordingly to the JSON format . It is great to use while extracting , manipulating and validating the data while using for API /Performance testing. 

Stay tuned for the next article on XPath extractor.