In the world of software performance testing, there are a lot of different ways to verify that your final product is working as expected. One of the most important things to do is load testing, which is done to make sure that your software (and hardware) operates properly under a certain level of usage. Essentially, load testing is the process of applying a steady level of demand to software, websites, or hardware to ensure to measure behavior under certain conditions and gauge how this behavior compares to performance expectations.
There are a variety of types of performance testing, but for the sake of this discussion, we’ll focus on two main types: load testing vs. stress testing. While they are fairly similar, they’re also quite different. Each type of performance testing has its own place and things that they do better than the other. Let’s take a closer look at each one.
Starting with load testing, the main function of this type of testing is to help developers and programmers understand how their software or website behaves under a certain level of load. For example, when load testing a website, it’s important to make sure that the website can handle a certain level of traffic and not crash under a heavy load. Traffic surges like this can occur if a piece of content goes viral, or is a website is featured for another reason. In any event, this is an excellent example of why load testing is important. The main goal of load testing is to ensure that a website or software application meets the expected level of performance under a specified amount of load.
Stress testing is different from load testing in that its main purpose is to find the breaking point of a website or software application. While load testing measures performance under a certain level of demand, stress testing seeks to find the level of demand that actually crashes a website, web server or causes a software application to freeze or crash. Essentially, the goal of stress testing is to ensure that a developer can find the breaking point of their website or software application and then make the necessary performance improvements to ensure that this breaking point is past the expected level of demand, thus preventing crashing and other problems.
So, a good way to understand the difference between load testing and stress testing is this: load testing is used to see how websites and software perform under load, and stress testing is used to break those same things in order to find their limits. Both of these performance testing methods each have their own use cases, and each are valuable to an agile testing environment.
Because this page is primarily about load testing, we’re going to cover some of the basics of how load testing is performed, and various load testing methods. To begin, let’s take a look at how load testing is performed for both website and software.
Load testing a website is one of the most straightforward processes that can be done in terms of performance testing. Essentially, a website is “flooded” with a specific amount of visitors in a certain timeframe and then the overall performance of that website is measured during this time. As an example, let’s assume that you have a website that you expect to receive 500 visitors per hour. In this situation you’d set up a load test where 500 virtual bots visit your website in an hour and then during this time you’d monitor various metrics such as your CPU/memory usage on your web server, the speed at which your website loads under this level of demand, and other various performance metrics.
The goal in this load testing scenario would be to determine whether or not your website and web server meet your expectations in terms of performance. If you find that your website runs extremely slow under a load test, then it’s time to look at your code and try to find out why. You may also want to look at the settings on your web server and try to see what settings may be changed in order to improve performance. For example, it’s possible that you may be able to allocate more memory, turn on caching, or make other improvements that increase the speed and performance of your site under load.
In contrast, if your website performs well under load, then you may want to increase the load until performance begins to suffer in order to identify any performance bottlenecks. Often times the design of your site can be improved to make it respond better under load. Things like images that are too big, external API calls, and other performance-limiting code can be removed to speed up the site and increase overall performance.
Software performance/load testing is similar to website load testing in almost every way except that it’s not done in a web environment (except when load testing web applications). Software is primarily load tested on local machines using load testing programs that are designed to see how software performs under specific levels of demand or load.
Typically, load testing of websites is performed using virtual machines that can be spun up in a cloud and instantiated on demand. This allows developers doing load testing to create as many virtual users on demand as they need in order to satisfy their load testing scenarios. When creating virtual machines for load and performance testing, cloud servers are typically used rather than physical machines because they are generally easier to terminate once the load test has ended, and typically, they’re also more cost effective.
There are a variety of load testing tools (both free and paid) that are commonly used for website load testing. If you’re willing to set up and configure a tool and are reasonably savvy in terms of servers and web programming, you might be able to use a free tool. However, if you’re less savvy or simply don’t want to bother with instantiating and terminating servers, then a paid tool may be more effective for you. Listed below are different load testing tools that are commonly used for both load and stress testing.
The following list of load testing tools is examined in detail below:
Apache’s load testing tool is free and open source. It’s commonly used for server and website testing, although it can be used for testing Java objects, APIs and other software performance testing situations. One important thing to understand about JMeter is that it’s not a browser but works on a protocol level, so it requires a more advanced understanding of web programming to implement.
Artillery is a free load testing toolkit that is designed to help developers build applications that are scalable and reliable under high load. Artillery is free to download and use, and requires Node.js to operate. Although free, Artillery does require a certain level of technical expertise to operate.
This load testing tool is not free, but allows for the simple creation of cloud-based servers and point-and-click setups for load testing. It doesn’t require as much implementation compared to the other tools yet still allows for testing of REST, SOAP, and other web-based protocols.
Similar to LoadUI, LoadImpact is a paid testing tool that allows developers to create a load test scenario with very little back-end programming. Most of the setup and implementation is done in their web application and extensive data is provided during and after the load test.
This tool was developed by Hewlett Packard to load test enterprise applications. It’s not primarily used for smaller load or performance testing scenarios, but is quite effective when doing performance testing in larger scale settings.
Rounding out this list of load testing tools is a free tool, also by HP, that is used to for testing web services and web applications, although it’s mainly used to test servers and the underlying infrastructure behind a website.
While load testing is an excellent tool to ensure the viability of a website under certain levels of demand, it does little to shed light on what the users are actually experiencing. Although there are some load tests that use real browsers, they still don’t really help understand how the user experience is truly impacted when browsing a website.
Even though load testing can provide excellent insights into performance metrics, it does little to actually correlate these metrics with user satisfaction. For example, a web page that performs well under load may be poorly designed or otherwise unsatisfying to end users.
When interpreting the data from a load test, it’s important to not only consider the actual load test data, but more specifically, how it relates to user behavior and the overall end user experience. Being able to tie this performance testing data together with user perceptions represents the pinnacle of performance testing and optimization.