The best load testing tools for developers
— Last updated: 2021-10-22
From 2009-2018 David was CEO at Server Density, a SaaS server monitoring startup. He has been a developer for 15+ years and is now co-founder of Console.
✦ Disclosure: All reviews are editorially independent and partners must meet our selection criteria. Where indicated, we work with some partners to provide extras to our audience, but do not accept payment for reviews.
Load testing tools help understand whether your infrastructure can handle a large spike of traffic and how fast pages load. The best load testing tools provide scriptable test plans, protocol- and browser-level test execution, and for this review must also have a developer focus.
We tested 11 load testing tools using our independent selection criteria and the requirements described below. The best 6 load testing tools for developers and engineers in 2021 are:
In this article, we explain why. We assessed the key features all load testing tools should have from the perspective of an experienced developer.
What is the difference between load testing and browser testing?
Load testing is focused on sending lots of requests to simulate a traffic spike or a sudden influx of users. It examines the infrastructure with a focus on errors and measuring response time. This can be achieved through protocol-level requests to HTTP, WebSockets or API endpoints, but can also be implemented using browser simulations.
Testing with a real browser is important to ensure that the page resources load and the pager renders quickly. Protocol-level testing does not load all the extra resources a page may reference, such as third party scripts or images. Browser-level testing load everything, which means the infrastructure gets fully tested.
Browser testing is focused on browser compatibility to ensure that the web page renders correctly across different versions and platforms. The best browser testing tools allow tests on many different browsers, including older versions and mobile browsers. The browser version or platform do not matter for load testing.
There are a large number of load testing tools available on the market. For each of our load testing tool reviews we will assess functionality based on our standard selection criteria plus these three requirements:
Scriptable test plans
Load testing is just another component of code, so the test definitions should live alongside it in the source repo. This means the test plan must be able to be exported to a text format that can be stored in version control. Better if it can be executed directly from it.
Protocol and browser test execution
There are lots of load testing tools that have badly designed UIs or limited configuration options. These might be ok for non-technical users, but developers need more sophisticated tools. This means the ability to customize requests, detailed reporting, scripting, integration with CI/CD for tests on commit / regression testing, a CLI and a nicely designed dark mode if there is a GUI.
Best load testing tools
Flood is a cloud hosted performance and load testing service that supports running existing JMeter, Gatling or Selenium tests. It also has its own online test builder for executing HTTP requests.
- Cloud hosted with the option to run tests from your own infrastructure.
- Supports protocol-level test scripts in JMeter or Gatling, or browser-level test scripts in Element or Selenium.
- Tests are based around defined Service Level Objectives (SLOs).
Flood have built their own open-source browser-based load generation tool called Element which can be used independently, or with Flood’s cloud service. Element uses Playwright, an open source NodeJS library, which allows you to script user interaction with Chrome, Safari and Firefox browsers.
The combined support for multiple load testing frameworks means you can use Flood to execute both protocol-level tests (with JMeter or Gatling) as well as browser-level tests (with Selenium or Element).
Flood load tests are based around Service Level Objective (SLO) monitoring criteria such as concurrent users, failed/passed transactions, response time, throughput or transactions per minute. Once defined, you can launch a test from specific regions over a period of time, with the option to ramp up requests. These can be triggered from the web UI, via the Flood API or through integration with CI/CD services like Jenkins, GitHub, CircleCI and Travis CI.
One of my favorite features is the ability to use Flood with your own infrastructure. You can connect AWS, Azure or Google Cloud, or run the agent on servers elsewhere. Flood will then coordinate the load testing on your own systems so you don’t incur additional costs. Flood even supports AWS EC2 spot instances, which can be very cost effective.
Flood is my favorite load testing tool because of its flexibility to work with different scripting frameworks as well as the control it offers over the infrastructure. As a developer, I appreciate the cross-platform/framework approach because it allows you to define all your test plans in code, which is where they should be.
- Free and open source with an optional cloud service if you want distributed tests.
- CLI for testing HTTP, WebSockets and gRPC requests.
- Results displayed in the terminal and supports exporting to services like AWS Cloudwatch, Datadog, Grafana, GitHub Actions, etc.
k6 is open source but there is a cloud version that provides extra features around scaling and visualizing the load tests, particularly if you want to run load tests from different locations. It is now part of Grafana, which we reviewed in our best server monitoring tools review.
k6 does not simulate a browser but does provide built-in metrics like time spent blocked, connecting, negotiating the TLS handshake, total data received, total response time and parsing of the response. This means it is very flexible and can be used for regression testing e.g. checking for expected output, stress testing e.g. sending extreme numbers of requests, smoke testing e.g. sending small numbers of requests to check expected responses/errors, and soak testing e.g. testing for reliable responses over a longer period of time.
The CLI output can be configured to be human or machine readable, but there is no graphical interface as standard. Instead, you can pipe the results into a variety of different systems, such as AWS Cloudwatch, Datadog, Grafana, New Relic, StatsD or just CSV or JSON.
k6 is my second favorite load testing tool for developers because it is CLI-first and all the test plans are written in code, so they can live alongside the systems they’re testing. We use k6 at Console - deployed using GitHub Actions and Cloudflare Workers - for performance testing every commit for our website to ensure pages are always fast.
If you are looking just for HTTP load testing then k6 does a great job, but the main limitation is the lack of browser simulation. If you want to test browser rendering performance, k6 is not the right tool.
Locus is a free and open source load testing tool that executes tests written in Python. It simulates “users” making single or multi-step requests primarily to HTTP endpoints, but tests can be written to support any system that can interact with Python e.g. XML-RPC.
- Free and open source.
- Tests written in Python to execute requests to HTTP endpoints. Support for non-HTTP services is possible with custom scripts.
- Includes a web UI to analyze results but can also be run headless from the CLI or Docker.
- Protocol-level testing only - does not support browser testing.
Locust tests support the full functionality of Python so can be very sophisticated. Tests execute in an isolated Python greenlet so you can avoid having to deal with asynchronous callbacks - Locust handles that for you. Test plans can simulate hundreds of users and Locust supports distributed tests across multiple nodes, including in Docker containers.
Loadster is a cloud load testing tool that supports both protocol-level testing to HTTP endpoints and browser performance simulation (Chrome only). The UI has a dark, neon, retro feel (in a good way), which is a style we appreciate at Console!
- Cloud hosted load testing service with support for protocol and browser testing.
- Test plans built using Chrome or Firefox browser extensions, or in-browser editor.
- No custom scripting support.
The main complaint against Loadster is the lack of scripting capabilities, but that is somewhat made up for by the advanced options available for both protocol and browser testing. It is clearly designed for technical users.
Gatling is an open source load testing tool that supports both scripted tests (in a custom Domain Specific Language or Scala) or generated using a web recorder. It tests HTTP requests, so does not simulate browser rendering. It can be run locally (if you have Java installed) or you can create and upload test plans to their cloud service.
- Free and open source with an optional cloud service.
- Tests are written in Scala or the Gatling Domain Specific Language (DSL) which has sophisticated options for assertions, protocol testing and logic control statements.
- Only supports HTTP requests, not browser rendering.
Writing Gatling test scripts in Scala or the Gatling DSL allows for very flexible scenarios. Multi-step HTTP requests can be created and then executed by a configurable number of “users”. This simulates load but gives you the option to ramp visitors over a period of time.
Tests can include dynamic data and define checks, such as HTTP status requests, conditional based on the HTTP response, as well as assertions for response times. Gatling supports HTTP, SSL, WebSockets, HTTP polling, and Server Sent Events (SSE). It can also be integrated with CI/CD systems like Jenkins and Bamboo, and tools like Gradle and Maven.
Gatling is a very flexible load testing tool framework that benefits from the power of using Scala for test plans. However, its reliance on Java means installation is a pain for developers on their desktop, especially if on macOS which blocks Java scripts by default.
Apache JMeter is a free and open source load testing tool that runs on a protocol-level to allow performance testing of HTTP, HTTPS, SOAP, REST, FTP, LDAP, Mail, TCP, Java and other technologies. It creates test plans via a browser recorder which can be saved to a standardized format and run via a headless CLI on any system that supports Java.
- Free and open source - many other tools can execute the standardized JMX test plan format.
- Supports lots of protocols including HTTP, SOAP, REST and TCP.
- Complex and difficult to learn due to the age of the tool and difficulty deploying Java-based applications.
- You have to run your own testing infrastructure.
The main problem with JMeter is its complexity. The documentation assumes a lot of knowledge which makes it difficult to get started. However, investing time is repaid through the flexibility of the wide range of supported protocols, the ability to define complex test logic, request configuration and the assertions/checks. Tests can also be distributed to multiple nodes using server mode.
JMeter exports test results in a number of different formats, but the lack of any ability to easily visualize results is another downside. JMeter can output in HTML, JSON, XML or other text formats, but does not present a user-friendly interface for analyzing the results. Plugins can be used to deal with this, such as by sending results to Datadog or Prometheus.
JMeter is very powerful and has been around for a long time. This means writing tests in the JMX format results in portable tests that can often be imported into other testing products. JMeter was once the first choice for developers - and is still a good, open source load testing framework - but there are now good quality JMeter alternatives that can provide a more modern approach.
LoadView is a load and performance testing product that runs in the cloud. It can execute different types of tests from simple HTTP requests through to browser simulation (Chrome, Edge, Firefox, iOS, Android, Windows Phone and Blackberry), scripted actions, SOAP or REST APIs, audio/video streaming, WebSockets and JMeter tests. It can even import Postman Collections.
- Tests are primarily defined in the web UI, but can be imported from JMeter.
- Supports different testing methods including protocol and browser testing.
- Cannot edit the script code unless you install a Windows application.
Test plans can be configured to ramp up over a period of time with options to increase the requests based on transaction rate goals, fixed requests over time or dynamically adjusting curves that change during the test. Tests can be run through a proxy to allow private tests and multiple locations can be configured for distributed load testing.
LoadView has a nice web UI and developers will appreciate being able to import JMeter files and Postman Collections, however tests are still primarily defined in the web UI rather than using a scripting language. LoadView does support recording and editing test scripts in code, but only using a Windows desktop application. Tests must also be run through the UI or triggered via the API, so integration into CI/CD pipelines is limited.
Siege is an open source load testing tool that is designed to stress test single or multiple URLs.
- Free and open source.
- Basic CLI for stress testing HTTP requests. No scripting of requests.
- Basic response stats on completion. No advanced reporting.
Siege runs as a CLI, issuing multiple requests over a specified time period. It can issue HTTP/1.0 or HTTP/1.1 requests via GET or POST, and supports configuring cookies, logging and basic authentication.
Test results are reported once the test finishes. These include time spent, data transferred, average response time, transaction rate, throughput, and status code counts.
Siege is a fairly basic stress testing tool that specializes in sending large numbers of simultaneous requests. This is good for testing whether your infrastructure can suddenly scale up, but does not represent what real users will do. Siege is useful for quick testing, but the other tools reviewed have many more capabilities.
Bees with Machine Guns
Bees with Machine Guns is similar to Siege in that it is designed to stress test URLs by sending HTTP requests to a specified URL. You specify the target, how many requests you want to send and how many should be executed concurrently. The main difference is that the requests are orchestrated by spinning up EC2 instances to send the requests.
- Does not support scripted tests - only sends requests to a specified endpoint.
- Connects to your AWS account and uses EC2 instances to execute requests.
- Primarily useful for stress testing.
Bees with Machine Guns is written in Python and uses Boto to communicate with AWS, which you must configure on the system you’re calling the command from. The basic functionality simply issues the requests and provides a report on the response time and status codes.
The advantage of using Bees with Machine Guns is that it manages starting and stopping the EC2 instances, optionally across multiple regions and zones, so you can generate large request volumes using remote, cloud infrastructure.
You can define all the standard HTTP parameters like cookies, headers and authentication. It can also be combined with hurl, an HTTP server load testing utility that provides better support for multithreading and more detailed performance statistics.
As with Siege, Bees with Machine Guns is a basic CLI that makes it easy for technical users to spin up some EC2 instances to run quick stress tests. It lacks advanced scripting and reporting, so is probably best used as a simple ad-hoc test utility. It does have a cool name though. The status outputs are quite fun.
LoadNinja allows you to test web UIs by simulating browser requests recorded by a browser editor.
- Executes tests using real browsers.
- Limited metrics/measurement options.
- Support for ramp up configuration for stress testing.
- Only supports Jenkins for CI/CD integration.
The LoadNinja editor loads up the URL you want to test, then you click through and it builds a test plan based on the actions performed. You can add dynamic data to parameterize test commands and specify validations as the test runs. It also supports API testing.
Tests are executed in real browsers so the full render is included in the response time results, but there is limited flexibility on being able to configure metrics or alerts on poorly performing pages. LoadNinja is a basic stress testing platform that is designed to execute large numbers of requests over a defined period of time. It supports ramp up and concurrent user configuration but is otherwise quite basic.
LoadNinja can be triggered by CI/CD integration into Jenkins, but does not support any other systems unless you write your own scripts to trigger runs via their API. The scriptless approach means it can be managed by non-technical users but it lacks advanced features.
NeoLoad is a Windows, Linux or macOS desktop application for load testing written in Java.
- Desktop application for Windows, Linux and macOS.
- Supports distributed testing via a separately deployed agent.
- Powerful test design options, but the UI is dated and slow. It’s a pain to install because of the unpolished Java implementation.
When installing NeoLoad, you can choose to deploy the load generator agent separately from the controller application which allows you to set up a distributed load testing environment.
You can import Swagger/OpenAPI spec files or launch a browser UI to record the session as you browse - this uses browsers already installed on your system.
There are powerful options to define user paths, such as clicking through page elements, submitting forms and defining the test parameters. This allows you to simulate many users with different browsers, connection speeds and request load. Results are output in the UI, graphed, and can be shared via a web UI.
Although NeoLoad has many of the features of the more modern load testing tools reviewed above, the UI is dated and slow. Tests cannot be automated, there is no support for common open source test formats, and it cannot be integrated with CI/CD systems easily. There are much better load testing tools for developers.
- Silk Performer we were not able to test because it required contacting sales to request a free trial. The Console selection criteria require that tools be available as self-service, so we excluded it from this review.
- SmartMeter is a desktop application written in Java. It has a built-in browser used to record test plans which are then executed from your local machine. It also supports the Apache JMeter format so can execute existing scripts. We found SmartMeter to be a dated approach to load testing. It required executing a shell script to launch the application and multiple components were blocked by the security restrictions on macOS. This made it difficult and cumbersome to use. It does support a non-GUI mode as well as connecting to other instances in distributed mode, however there are better tools available.
- StressStimulus is only available for Windows. The Console selection criteria require that tools be available for multiple platforms, so we excluded it from this review.
- WebLoad is an enterprise load testing tool but it is only available as a Windows download. The cloud SaaS version requires you to submit a form and wait to speak to a sales rep to get an account. The Console selection criteria require that tools be available as self-service, so we excluded it from this review.
Our editorial policy
Why you can trust us
Console is written by developers for developers. Using our decades of experience building software at scale, we apply strict selection criteria to decide which software we feature.
This includes asking questions like “Would this form part of a daily-use set of developer tools?”, “Would this be used by advanced, power-users?” and “Does it have a good graphical and/or command line interface? Shortcuts? Accessibility?”. The more of these questions we can answer positively, the more likely a tool is to be featured.
We do not accept payment for inclusion and where we work with partners, they must fit our selection criteria before we consider working with them.
About the author
David Mytton is co-founder of Console. From 2009-2018, David was CEO at Server Density, a SaaS server monitoring startup used by hundreds of customers to collect billions of time series metrics from millions of servers. He is also a researcher in sustainable computing at Uptime Institute and affiliated with Imperial College London. David has been a developer for 15+ years.
Console is the place developers go to find the best tools. Each week, our weekly newsletter picks out the most interesting tools and new releases. We keep track of everything - dev tools, devops, cloud, and APIs - so you don’t have to.
Interesting tools by email
Our free weekly newsletter picks out the 2-3 most interesting tools. See the latest email.