Artillery for Load Testing in Node.js

Posted by


In this tutorial, we will explore how to perform load testing on your Node.js application using Artillery. Load testing is crucial for ensuring that your application can handle a large number of users without crashing or slowing down. Artillery is a powerful and flexible load testing tool that allows you to simulate traffic to your application, generate detailed reports, and analyze performance metrics.

Prerequisites
Before we get started, make sure you have Node.js installed on your machine. You can download and install Node.js from the official website (https://nodejs.org/).

Step 1: Install Artillery
To install Artillery, open a terminal and run the following command:

npm install -g artillery

This command will install Artillery globally on your machine, allowing you to use it from any directory.

Step 2: Create a Node.js Application
For the purpose of this tutorial, we will create a simple Node.js application that we will use for load testing. Create a new directory for your project and navigate into it. Then, create a new file called app.js and add the following code:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!n');
});

server.listen(3000, () => {
    console.log('Server running on port 3000');
});

Save the file and run the following command in the terminal to start the server:

node app.js

This will start a simple HTTP server that listens on port 3000 and responds with "Hello, World!" to all requests.

Step 3: Write a Load Testing Scenario
Next, we need to create a load testing scenario that Artillery will use to generate traffic to our Node.js application. Create a new file called scenario.yml in the same directory as your Node.js application and add the following code:

config:
  target: 'http://localhost:3000'
  phases:
    - duration: 60
      arrivalRate: 10

scenarios:
  - flow:
      - get:
          url: '/'
          expect:
            statusCode: 200

In this scenario, we have specified a target URL (http://localhost:3000) for our Node.js application and defined a single phase with a duration of 60 seconds and an arrival rate of 10 new users per second. The scenario has a single flow that makes a GET request to the root route (‘/’) of the application and expects a response with a status code of 200.

Step 4: Run the Load Test
Now that we have created our load testing scenario, we can use Artillery to run the load test. Open a new terminal window, navigate to the directory where your Node.js application and scenario files are located, and run the following command:

artillery run scenario.yml

Artillery will start simulating traffic to your Node.js application based on the scenario you defined. You will see output in the terminal showing the progress of the test, including the number of requests sent, response times, and error rates.

Step 5: Analyze the Results
Once the load test has completed, Artillery will generate a report with detailed performance metrics that you can use to analyze the behavior of your application under load. The report will be saved in a file named report.json in the current directory.

To view the report, you can use the artillery report command:

artillery report --output report.html report.json

This command will generate an HTML report from the JSON output and save it in a file named report.html. You can open this file in a web browser to view the performance metrics, including response times, throughput, and error rates.

Load testing your Node.js application with Artillery is a crucial step in ensuring that it can handle heavy traffic and deliver optimal performance to users. By following the steps outlined in this tutorial, you can easily set up and run load tests on your application and analyze the results to identify any bottlenecks or performance issues.

0 0 votes
Article Rating
9 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@mguay
1 month ago

Check out my latest course, Build a Shopping App With Next.js + NestJS & Prisma: https://michaelguay.dev/build-a-shopping-app-with-next-js-nestjs-prisma/

@kellslte
1 month ago

Every single time I follow one of your tutorials, I get reminded of why I fell in love with software development(it pays the bills too 😂). Thank you for your detailed explanation of how things work and how to use these technologies to build more reliable systems. ✌🏾

@happypotato4252
1 month ago

Hello @Michael, I found this channel copying your Udemy course https://www.youtube.com/watch?v=lr8OH-edNmA

@chanmyaemaung
1 month ago

I am a big fan and have subscribed to your LMS platform.

@CreateApp-g5q
1 month ago

Hey @mguay
Can you please make a tutorial of how to implement Scalable crawler with NestJS and microservices? The UI will show the failed/succeeded/loading/queued jobs with re-crawler button on fail 🙏🏻🙌🏻

@dheerajsingh8191
1 month ago

I learn so much from your channel and your Udemy course ❤. Could you please make a video or course about creating a scalable live stream back-end? I'm familiar with tools like Node Media Server and FFmpeg, but I haven't found a comprehensive solution for building a large and efficient system.

@饶泽海
1 month ago

I’ve learned a lot of stuff from your channel. Thanks a million!

@archip8021
1 month ago

interesting. would it be a good idea / is it possible to define a set of endpoints to subsequently call to mimic normal user behavior, and then spawn like 1000 of them?

@vthanhann
1 month ago

Wow this video is published in right time for me. I am doing my thesis and I am finding a way to monitor the loads.
I have one question: we usually test this on a test api like the one in the video or we should test with the real API?