They say that no plan survives contact with the enemy; by the same token, no web application survives its first contact with users, no matter how thoroughly it’s been tested. However, that doesn’t mean that you shouldn’t try to test an application to its limits. Most developers do performance testing, but one type of testing that is easy to overlook is load testing.
Performance versus load testing
Although often used interchangeably, performance testing and load testing are not exactly the same. Performance testing is the more general practice of testing an application’s responsiveness and stability under real-life scenarios.
Load testing is a specific subset of performance testing that is meant to determine the application’s quality of service when being used by a specific number of users simultaneously. Load testing software simulates numerous simultaneous uses throughout the application, allowing you to identify bottlenecks caused by throughfare or by massive concurrency.
For example, I noticed that users of a blogging application were experiencing slowdowns while trying to edit their own content, an issue I had never noticed during conventional testing. By using load testing software called Apache JMeter, I found that a Ruby gem was causing a 20% slowdown for this particular functionality. I never would have identified the source of that bottleneck on my own.
Load testing may seem like an obvious practice but it can be overlooked. When you test your own application each day, it is easy to forget that what you see and what your users see may be very different. Any client-server application needs load testing in order to determine its limits and improve user experience.
Of course, your own personal development environment is a far cry from what your application will see during professional use. While there is some merit to load testing in your production environment, it’s more realistic and safer to either replicate your own, or reproduce a client’s environment. No matter what you do, make sure that your testing environment is not using third-party plugins like PayPal. There are plenty of modules that can simulate those aspects of your application, but the only thing interacting with the test should be virtual users.
Testing in a staging environment is key to performance testing of all stripes. Having one gives you a buffer between your development environment and the client’s production environment. This allows you to catch errors and slowdowns before you push to production, thus keeping your clients happy. There are many online tools that can help your team set up a staging environment for your site, including SiteGround and Vagrant. Use these software suites to create a staging environment that closely resembles real-use cases.
The most popular load testing software is LoadRunner, but there are many viable alternatives out there. Below, we’ve evaluated the pros and cons of several of these load testing software suites so you can evaluate what best fits your needs.
Load testing software suites
JMeter, like most Apache software, is open source. This makes it ideal for independent developers, but it’s not as effective for applications that anticipate thousands of users per day.
- Free to use
- Easy to set up and run from any environment
- Scripting is easy to use and replicate
- Highly customizable by adding extensions
- Data visualization is not user friendly
- Distributed testing is not available; you cannot test two different use cases at the same time
- Not as scalable as premium testing suites
Locust is a Python-based load testing software. It is completely open source, and allows users to create their own testing suites using pure Python code.
- Open source
- Highly customizable using Python, which makes it very human-friendly
- No built-in visualization services
- Suffers from poor performance when creating more than a few hundred virtual users
Loader.io is a cloud-based load testing service, with a robust free option available.
- Easy to use and understand web-based interface
- Data visualization is crisp and clean
- No installation required
- Free plan only allows one target host, compared to unlimited target hosts in paid option
Gatling is another open source load testing suite. Like Locust, is allows text-based scripting, using their own domain-specific language. There is also a paid option called Gatling FrontLine.
- Open source
- Easy to design custom testing scripts
- Colorful and readable data visualization
- Not as intuitive as other open source software suites
- Does not support very many protocols
BlazeMeter is a popular platform as service designed to work with JMeter. It is able to make up for the scalability and visualization weaknesses of JMeter, but it is not open source.
- Excellent visualization and reporting
- Highly scalable
- Fully compatible with JMeter
- Customer support is slow at best
- Easy to use and set up, with a web-based UI
- Analytics are displayed clearly without fuss
- Support by RadView is responsive and prompt
- Although there is no listed price, it is reportedly more cost effective than other premium load testing software
- Does not currently have a recording function
- RadView does not display pricing on their website
Micro Focus LoadRunner
One of the most popular load testing tools available, LoadRunner is arguably the most reliable and versatile load testing software suites. Like WebLOAD, a free version is available, with price increases for running more simulations.
- Ease of use and setup; works very quickly without requiring much server downtime
- Very adaptable to multiple scenarios; easy to create multiple types of simulated uses
- A new beta feature allows it to integrate with JMeter
- On the pricier side, and free version only allows 50 use cases
- Data visualization is not user-friendly
IBM Rational Performance Tester
Rational Performance Tester is a tool created by IBM, primarily designed to test Java-based applications. IBM offers several tiers of payment for use of the software license.
- Distributed load testing is easy to set up
- The UI is beginner-friendly
- Data parameterization is done more efficiently than many software suites
- Purchasing a software license is a complex procedure
- Does not support protocols that are not HTTP
- Fee for monthly license is more expensive than many competitors
SmartBear LoadUI Pro
This is a load testing tool from the makers of the popular SoapUI API testing software. It is best suited towards testing SOAP-based applications, and is one of the most expensive options on the market.
- Interface is highly intuitive, and can be configured in real time.
- Is easily compatible with SoapUI
- Amazon cloud integration
- Setting up tests has a steep learning curve
- An annual software license is very expensive
Choosing and using your load testing software
These are just a few of the more popular load testing tools. There are many more out there, so don’t be afraid to shop around for one that is best suited to your particular application.
When considering which to pick, think about these factors:
- Ease of use
- Analytic and data visualization
- Compatibility with your environment.
Once you’ve picked which load testing software to use, you might find yourself unsure of how to start. Some of the software suites, like WebLOAD and Locust.io, have extensive documentation and customer support for beginners, while BlazeMeter and LoadUI do not. Here are a few best practices to keep in mind while setting up your load tests.
- Thoughtfully increase the number of virtual users - It may be tempting to throw as many virtual users at your app to see how much it can take, but this blunt strategy won’t necessarily help you identify problems. Remember, the goal is to identify slowdowns, not crash your system. Set up your tests for one virtual user, then gradually increase the number so that you can identify trends more easily.
- Simulate real use - Your application may have a pre-planned flow to it, but real life users rarely do what you want them to. The more flexible testers, such as Locust and JMeter, make it easy to make your virtual users click through your app like a real user might--often at random, doubling back, and sometimes never purchasing anything.
- Analyze, analyze, analyze - Load testing isn’t about passing tests, it’s about obtaining data that can help you identify problem areas. All of these software suites show results in some way. Loader.io, WebLOAD, and BlazeMeter are particularly good at visualizing this data, but these tests don’t matter if you can’t interpret the output. If data analysis is not your thing, find somebody whose thing it is, and get their take on it!
Remember, function should always take priority over form. Clients want a product that looks good, but only if it also works consistently and efficiently. By making regular load tests a part of your production cycle, you can identify lag before it becomes an issue, making you and your client much happier.