Choosing a performance testing tool is not an easy task. Based on our experience, we want to present you with tool recommendations for both load and client-side performance testing.
Performance testing is an indispensable part of the modern development process. It helps us to determine a system’s behavior under normal and unusual load conditions.
Various performance testing tools are used to test the speed, responsiveness, and stability of applications under real-world conditions. By simulating real-world usage scenarios, these tools can help developers identify potential performance bottlenecks and optimize them.
Choosing the best performance testing tools to simulate load and execute our scripts is not an easy task. Among many open source and paid solutions, we need to consider what best suits our client’s business needs. In this article, we list tools for performance tests that we work with and have experience with.
What is performance testing?
Performance testing is an umbrella term covering all testing activities focused on the performance (responsiveness) of a system under different loads.
For clarity, it's best to separate the tools for:
- Backend (load testing)
- Frontend testing (client side)
- Mobile testing
In this post, we cover load testing and client-side testing tools. We have intentionally left out tools specifically for mobile performance testing. We will tackle this in a separate article, thus paying it due attention.
What’s on the menu: Performance testing tools
There are a variety of performance testing tools available, each with its own strengths and weaknesses. The most important factor in choosing a performance testing tool is to select one that will best meet the needs of your particular project.
Load performance testing tools
Load performance testing tools help to ensure that your site can handle sudden spikes in traffic without crashing or suffering from lags or other issues. Let’s check which load testing tool can come in handy to help you keep your site running smoothly and efficiently.
JMeter is definitely the most popular open source load testing tool. This multithreading framework allows performance and load testing both on static and dynamic resources and dynamic web applications.
It can be used to simulate a heavy load on a server, group of servers, and a network. It helps to analyze the performance under different load types. It supports a vast variety of protocols like: HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …), SOAP / REST Web Services, FTP, LDAP, SMTP(S), POP3(S) and IMAP(S), and TCP.
- Easy to use without extensive knowledge of programming, as it has a user interface (UI) and it is also possible to use a command-line interface (CLI);
- This tool has good reporting and data analysis capabilities. It is possible to generate (and, if necessary, customize) a report after a test to help to analyze results. During the test, we can only see a console dump;
- It’s extendible and you can use a Plugin Manager;
- It can be used for load tests for different kinds of applications. As an example:
It allows API, Database, and MQ testing;
- Easy installation;
- It supports distributed load tests;
- Community support.
- CPU and memory utilization can be very high for a large number of users.
- It is not a scripting tool, which makes automation challenging.
How/why do we choose this tool? Our process of tool selection:
- It has a strong support community. We could easily find solutions in case of any problems thanks to the abundance of learning materials.
- In case we need customization, we can write plugins and customize reports.
It supports the following protocols: HTTP/1.1, HTTP/2, WebSockets, and gRPC.
k6 is a CLI tool with developer-friendly APIs.
- Checks and Thresholds are used for goal-oriented, automation-friendly load testing.
- It is possible to use custom metrics.
- k6 is different to many other load testing tools in the way it handles hardware resources.
- Reports are not very robust, however, there is a possibility to use an open-source solution (k6-reporter).
- No distributed tests, however, you can run a huge load on a single machine or opt for a paid version (k6 cloud).
- At least basic knowledge about JS/TS is required.
How/why/when do we choose this tool? Our process of tool selection:
- k6 is a scripting solution, and we use it when our project will be maintained by developers or by QA engineers experienced in automation. We use it when we need to integrate tests with CI/CD and start a larger load on one machine.
- k6 is a good choice for developers or QAs experienced in automation, and in cases when we need to integrate tests with CI/CD.
- This is a very convenient tool if we want to keep our tests as scripts and if we face changes often. It enables us to work more effectively as a team.
Gatling is an open source tool with the option to record user flows. It provides Scala-based DSL and offers very good reports as well. Users can easily integrate tests within CI pipelines.
Galing supports the following protocols: HTTP(s)/1, JMS, SOAP, MQTT, HTTP/2, JDBC, and WebSockets.
- The metrics dashboard is very detailed
- The interactive report is stored as an HTML file
- It has plugins for testing Kafka, RabbitMQ, and JDBC
- Gatling 3.7 supports writing tests in Java, Kotlin, and Scala
- The user has to know at least the basics of Scala, Java, or Kotlin. DSL makes it easier to write load testing scripts, but the basics of programming language are a must.
- Some really useful features are available only in the paid version (Gatling Enterprise), e.g., distributed mode, live reporting, customizable reports. For some of them, e.g., running in distributed mode, there are workarounds, but it needs additional work/configuration.
How/why did we choose this tool? Our process of tool selection:
- This is a good tool if a project is in Java/Kotlin/Scala – we chose the same stack and maintenance is more simple.
- If we use Jenkins – Gatling integrates easily with this tool.
Locust is an open source tool written in Python, and its code on GitHub is open. It is possible to write user test scenarios in plain Python. It’s worth mentioning that this tool is lightweight, distributed, and scalable thanks to event-based implementation and the async approach.
It can support running a lot of load tests on a single machine, but also Locust offers the possibility of distributed tests over multiple machines to simulate millions of concurrent users.
Locust supports the protocols: HTTP/HTTPS, but users can write their own implementations for other protocols. As an example, Locust developers mention: XML-RPC and gRPC protocols.
- It supports distributed load tests
- It is expandable
- This framework is developer friendly
- Locust has a nice live reporting option if tests are run from a command-and-control web UI. Apart from showing live status updates for tests, it gives a possibility to stop the test or reset statistics.
- The user has to know at least the basics of Python
- Only HTTP/HTTPS protocols are supported out of the box.
How/why did we choose this tool? Our process of tool selection:
- If an application is written in Python, it’s good to consider Locust. Keeping the same stack made our cooperation with developers easier.
- Locust is scalable – in comparison with Gatling and k6, distributed mode is accessible for free.
To make it a bit easier to compare all the mentioned load performance testing tools and pick one the right load test tool, we put the most important information about each one in the table below.
|Language used for scripts
||XML||JS/TS||Gatling 3.7 – tool supports writing tests in Java, Kotlin, and Scala.||Python|
|Distributed testing||Yes||Only in the paid version||Only in the paid version||Yes|
|Free/paid||Free (open-source)||Open-source version but also paid cloud k6 version||Open-source and enterprise (paid) versions||Free (open-source)|
Client-side performance websites and tools
Although with growing numbers of users, backend has the biggest impact on total load time, we still keep in mind the performance golden rule (Steve Souders, former Head Performance Engineer at Google), which states that 80-90% of the end user response time is spent on frontend.
As a common practice, at Netguru we integrate Sitespeed or Lighthouse to our CI/CD, to monitor frontend performance and to catch any regression that may occur during the development.
Lighthouse is an open source tool by Google. It analyzes the performance, accessibility, best practices, and SEOP of the website. It’s directly integrated into Chrome DevTools, and is also available as a browser plugin.
We commonly implement Lighthouse into the CI workflow, displaying the test results in pull request comments and uploading the reports to S3 buckets.
Is a set of tools, rather than a single tool, containerized with Docker. From sitespeed.io, we can run Lighthouse, Google PageSpeed Insights, and WebPageTest. It is easy to customize and integrate with Graphite/InfluxDB and Grafana to keep track of metrics and performance on the dashboard.
Apart from the above-mentioned tools, some of our QA team made a decision to use other tools in their projects, best suited for their needs. These include:
Google PageSpeed Insights
Uses Lighthouse to analyze the given URL, and reports on the performance on mobile and desktop devices, at the same time providing suggestions on how it can be improved.
PSI checks for core web vitals (such as FCP, FID, LCP, etc.) based on the period of the previous 28 days. An interesting thing is PageSpeed modules, that are open-source modules that can be installed on the web servers and will optimize the site automatically.
A paid solution with a very pleasant and easy-to-use dashboard. Offers both synthetic and real user monitoring, which helps evaluate the visitor’s experience based on the browser, device, and geographical location. It has many features, including transaction monitoring and alerting. You can use the Pingdom API to integrate the web performance insights with existing systems.
We use an online version of this tool that gives us the possibility to run tests from different locations using real browsers. It also offers the possibility of customizing network conditions.
While analyzing results, WebPageTest gives us grades for the most critical performance areas and metrics about loading speed and webpage size. There is a paid version available, which offers a very interesting feature of experiments, which allows us to instantly test the suggestions provided without any actual changes to the code.
Mobile performance testing tools
This article focused on the tools we use when testing the performance of web applications. These, to some extent, can also be applied when working on mobile applications.
However, not wanting to only scratch the surface of the topic, we are preparing a separate article to present you with the mobile performance testing tools that we are using. Watch out!
Choosing the perfect performance testing tool
Performance testing tools are an important part of keeping your applications running smoothly and ensuring that your customers have a good experience. So, what is the best performance testing tool for you?
The answer to that question will depend on your specific needs. However, we hope that this article has given you a better understanding of the different options available and helped you make a more informed decision about which tool is right for you. If you’re still not sure, don’t hesitate to contact us for help – we would be happy to recommend the best tool for your unique situation.