1. Overview
With JMeter, we can group scenarios and run them in different ways to replicate real-world traffic.
In this tutorial, we’ll learn how and when to replicate real-world scenarios using multiple Thread Groups, as well as how to run them either sequentially or in parallel using a simple test plan.
2. Creating Multiple Thread Groups
The Thread Group is an element of JMeter that controls the number of threads to execute your test.
Each Thread Group in a JMeter Test Plan simulates a particular real-world application scenario.
Most server-based applications usually have more than one scenario, so creating a separate Thread Group mapped with each use case gives us more flexibility to distribute this load correctly during the test.
There are two ways to run Multiple Thread Groups: in sequence or parallel.
3. Running Thread Groups in Sequence
This is mainly useful when we want to execute application scenarios one after the other, especially when there is a dependency between various scenarios.
3.1. Use Case
Let’s say we have an eCommerce application where users can browse products, add specific products (that they like) to their cart and finally initiate checkout, followed by placing the final order.
For such applications, when there is a user journey that we want to mimic, we would like our scripts to follow a particular sequence. For example, our scripts might first execute the browse products, followed by adding products to the cart and finally placing an order.
3.2. Configuration
From the Test Plan, you can achieve this behavior by selecting the checkbox Run Thread Groups consecutively (i.e. one at a time):
4. Running Thread Groups in Parallel
This is mainly useful when there is no dependency between various scenarios.
The test actions are performed concurrently, simulating a mixed load on the system under test.
4.1. Use Case
As an example, imagine a website with news categorized into categories like Tech News, Market News, Sports News, etc.
The homepage of this website will always show the latest top news from all different categories.
For such applications, we can still create multiple Thread Groups to have different user load distributions across different pages.
It is, however, possible to execute these Thread Groups at the same time, since they are mutually exclusive.
4.2. Configuration
Test Plans in JMeter are configured by default to run Multiple Thread Groups in parallel, so we don’t need to check Run Thread Groups consecutively.
5. Test Case Setup
To try out a Test Plan, we need an API. We can use one exposed by the JSON Placeholder site. This site provides fake APIs for us to experiment with.
We will use two scenarios for our Test Plan
Scenario 1:Reading a particular post.
Scenario 2: Creating a new post.
Since most end users will be interested in reading posts instead of writing a new post we would like to keep them as part of two separate Thread Groups.
6. Adding Thread Groups to the Test Plan
6.1. Creating a Basic Test Plan
We’ll run JMeter to get started.
By default, JMeter creates a default test plan with the name Test Plan. Let’s update this name to My Test Plan:
6.2. Adding Multiple Thread Groups
To create a Thread Group, we’ll right-click on the Test Plan and select Add -> Threads (Users) -> Thread Group:
Now we’ll create two Thread Groups, starting with a GET Request Thread Group*:*
This Thread Group will be used to read a particular Post.
We’ve specified some key parameters here:
- Name: GET Request Thread Group *(*the name we want to give to this thread group)
- Number of Threads: 5 (number of virtual users we would mimic as part of the load)
- Ramp up Period:10 (time needed to bring the configured number of threads up and running)
- Loop Count:1 (number of times JMeter should execute a particular scenario)
Next, we will create the POST Request Thread Group*:*
This Thread Group will be used to create a new post.
Here, we have specified:
- Name: POST Request Thread Group *(*the name we want to give to this thread group)
- Number of Threads: 5 (number of virtual users we would mimic as part of the load).
- Ramp-up Period: 10 (time needed to bring the configured number of threads up and running for a particular thread group)
- Loop Count: 1 (number of times JMeter should execute a particular scenario defined in an individual thread group)
6.3. Adding Request
Now, for each Thread Group, we’ll add a new HTTP Request.
To create a Request, we right-click on the Test Group and select Add -> Sampler -> HTTP Request:
Now we create a request under GET Request Thread Group*:*
Here, we specified:
- Name: Read Post(the name we want to give to this HTTP Request)
- Comments: Reading a particular post with ID =1
- Server Name or IP: my-json-server.typicode.com
- HTTP Request Type: GET (HTTP Request Method)
- Path: /typicode/demo/posts
- Send Parameters with the request: Here, we have used 1 parameter i.e id (this is needed to retrieve a post with a particular id)
Now we will create another request under POST Request Thread Group:
Here, we have specified:
- Name: Create Post(the name we want to give to this HTTP Request)
- Comments: Create a new post with ID =p1 (by publishing it to the server)
- Server Name or IP: my-json-server.typicode.com
- Path: /typicode/demo/posts
- Send Parameters with the request: Here, we have used two parameters i.e id, and title (these are the attributes needed to create a new Post)
6.4. Adding Summary Report
JMeter gives us the ability to view the results in multiple formats.
To view the results of our execution, we’ll add a View Results in Table Listener.
To create a Request, we right-click on the “Test Plan” and select Add -> Listener -> View Results in Table:
6.5. Run the Test (In Parallel)
Now we press the Run button (Ctrl + R) on the Toolbar to start the JMeter Performance Test.
The test result is displayed in real time:
This shows that Read Post and Create Post are run one after the other (in parallel) for the number of Threads configured.
This Test result is an outcome of running multiple Thread Groups in parallel. This is the default setting of a Test Plan (with the checkbox unselected):
6.6. Run the Test (In Sequence)
Now we select Run Thread Groups consecutively(i.e. one at a time) checkbox from our Test Plan:
Now we press the Run button (Ctrl + R) again on the Toolbar to start the JMeter Performance Test.
The test result is displayed in real time:
This shows that all threads mapped to Read Post are executed first, followed by the Create Post threads.
7. Conclusion
In this tutorial, we’ve seen how we can create multiple Thread Groups and can use them to simulate real application user load.
We also learned scenarios around how to configure multiple thread groups either sequentially or in parallel.