A Comparative Study of Load Testing Tools: k6, Locust, and Azure Load Testing

Posted by

This post has been republished via RSS; it originally appeared at: Microsoft Tech Community - Latest Blogs - .

In the world of software development, load testing plays a critical role in ensuring that applications can withstand the pressure of real-world use. We will delve into three popular load testing tools: k6, Locust, and Azure load testing, introducing their usages and comparing their features, strengths, and drawbacks. They are also the ideal tools to verify the scaling behaviors in Azure App Service, container app, etc.



Grafana k6 is an open-source load testing tool that makes performance testing easy and productive for engineering teams. k6 is free, developer-centric, and extensible. Reference: https://k6.io/docs/ Opens in new window or tab. QuickStart:

1. Install k6

On Windows, simply download and run the latest official installer.



2. Write your script

Create a new file and name it test.js (or any other name of your choice).

In this file, you can write your k6 script to perform various HTTP requests on your website. Here is a simple example to get you started:

import http from "k6/http";
import { check, sleep } from "k6";

export default function () {
  let res = http.get("https://example.com/");
  check(res, {
    "status is 200": (r) => r.status === 200,

This script performs an HTTP GET request to https://example.com/ and checks that the response status is 200. It then waits for 1 second before sending another request.

You can customize this script to perform different types of requests (e.g. POST, PUT, DELETE) and add different types of checks to evaluate your website's performance.


3. Run your script

To run your script, open a terminal and run the following command:

k6 run test.js

This will execute your script and output the results in the terminal. By default, k6 will simulate 1 virtual user and execute the script once.


4. Analyze the results

After running your script, you can analyze the results to evaluate your website's performance. k6 provides various metrics, including response time, requests per second, and error rate.

Here's an example output:

data_received..............: 52 kB  # Total amount of received data
data_sent..................: 406 B  # Total amount of sent data
http_req_blocked...........: avg=0s    min=0s     med=0s    max=1.3ms  p(90)=0s    p(95)=0s    
http_req_connecting........: avg=0s    min=0s     med=0s    max=1.27ms p(90)=0s    p(95)=0s    
http_req_duration..........: avg=6.05s min=6.05s  med=6.05s max=6.05s  p(90)=6.05s p(95)=6.05s
http_req_receiving.........: avg=0s    min=0s     med=0s    max=31µs   p(90)=0s    p(95)=0s    
http_req_sending...........: avg=19µs  min=10µs   med=16µs  max=796µs  p(90)=21µs  p(95)=27µs  
http_req_tls_handshaking...: avg=0s    min=0s     med=0s    max=0s     p(90)=0s    p(95)=0s    
http_req_waiting...........: avg=6.05s min=6.05s  med=6.05s max=6.05s  p(90)=6.05s p(95)=6.05s
http_reqs..................: 1      # Total number of HTTP requests made
iteration_duration.........: avg=6.08s min=6.08s  med=6.08s max=6.08s  p(90)=6.08s p(95)=6.08s
iterations.................: 1      # Total number of iterations
vus........................: 1      # Total number of virtual users

Here, you can see that the script simulated 1 virtual user that made a single HTTP request to the website, and the response time was 6.05 seconds.

You can use this information to identify performance bottlenecks on your website and optimize it accordingly.



Locust is an easy to use, scriptable and scalable performance testing tool. You define the behavior of your users in regular Python code, instead of being constrained by a UI or domain specific language that only pretends to be real code. This makes Locust infinitely expandable and very developer friendly.

To get started right away, head over to the official documentation. https://docs.locust.io/en/stable/what-is-locust.html Opens in new window or tab
Below is a QuickStart.


1. Install Locust
First, you need to install Locust on your system. You can do this by using pip, the Python package installer. Run the following command in your terminal:

pip install locust


2. Create a Locust file
Next, you need to create a Python file (e.g., locustfile.py) that describes the actions your users will take on your website. Here's a basic example:

from locust import HttpUser, task

class HelloWorldUser(HttpUser):
    def hello_world(self):

In this example, the user waits between 5 and 15 seconds and then hits the home page of your website.


3. Run Locust and Open Locust's web interface
Now you can start Locust by using the following command in your terminal, in the directory where your locustfile.py is located:

locust -f locustfile.py

Alternatively, you can use distributed load generation. Start a locust in master mode:

locust -f my_locustfile.py --master

And then on each worker (replace with the IP of the master machine, or leave out the parameter altogether if your workers are on the same machine as the master):

locust -f my_locustfile.py --worker --master-host=



4. Start swarming and Monitor results
In the web interface, you can specify the number of users to simulate, the hatch rate (how fast new users are spawned), and the host to attack. Then click "Start swarming" to begin the test. Once the test is running, you can monitor the results in real-time in the web interface. You can see the number of requests per second, the average response time, the number of failures, and other useful information.


Step 5: Stop the test
When you're done testing, you can stop the test by clicking "Stop" in the web interface. You can then download the test results as a CSV file for further analysis.

Remember, this is a basic QuickStart. Locust is a powerful tool that allows you to script complex user behavior, distribute the load across multiple machines, and much more.


Azure Load Testing

Azure Load Testing is a fully managed load-testing service that enables you to generate high-scale load. The service simulates traffic for your applications, regardless of where they're hosted. Developers, testers, and quality assurance (QA) engineers can use it to optimize application performance, scalability, or capacity. It is the easiest way in 3 methods within this article.


1. Create a Load Test

First, log in to the Azure portal and navigate to the Load Testing section. Click on "Create" to create a new load test.



2. Create a Test Scenario and Run the Load Test

You can specify load to Virtual User or Requests per second(RPS). When use Virtual User, Azure will simulate the specified number of users accessing your website and record the performance.



3. Monitor and analyze the Results

While the test is running, you can monitor the results in real-time in the Azure portal. You can see metrics like the number of users, the response time, the throughput, and the number of errors. It provides a detailed report with charts and tables that show the performance of your website under the simulated load. You can also download the raw data for further analysis.



4. Adjust and Repeat

Based on the results of the load test, you may need to adjust your website or application to handle higher loads. You can then repeat the load test to see if your changes have improved the performance.



Here's a comparison table that outlines the advantages and disadvantages of k6s, Locust, and Azure Load Testing:

Load Testing Tool Advantages Disadvantages
k6s - Developer-friendly (JavaScript-based)
- Supports local and cloud execution
- Powerful CLI and well-documented API
- Lacks a graphical user interface (GUI)
- No support for distributed testing
Locust - Flexible (Python-based)
- Supports distributed load injection
- Web-based UI for test execution and results visualization
- Requires Python skills
- No straightforward way for cloud execution
Azure Load Testing - Seamless integration with Azure services
- Detailed performance reports
- Supports both cloud-based and on-premises testing
- User-friendly interface
- Can be costly, especially for large-scale tests https://azure.microsoft.com/en-us/pricing/details/load-testing/ Opens in new window or tab
- Reliance on Azure ecosystem could be a drawback for applications hosted elsewhere

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.