January 10th, 2024 by inflectra
load testing performance testing
Software load testing is a type of performance testing where you simulate real-life user load on any software, application, or website to determine how it behaves under normal and peak conditions. It's about understanding how the system performs when multiple users access it simultaneously. This can involve simulating hundreds or thousands of users to see how the software holds up under heavy demand.
The key reasons for conducting software load testing are as follows:
The main elements of load testing planning are as follows:
The next question is to clarify and understand what exactly you need to test in your plan.
The value of load and performance testing is directly proportional to how closely your test resembles real-life or expected usage. Knowing your business demands a particular feature to support incoming throughput at 1 million r/s (requests per second, sometimes abbreviated RPS) obviously largely dictates the end goal of testing that feature. For other features where no formal SLA exists, we recommend understanding existing traffic patterns in order to derive reasonable levels of traffic and load.
Application Performance Monitoring (APM) services such as New Relic, AppDynamics and Dynatrace should be able to help you understand:
Success of load testing depends on proper choice of tooling, and sufficient infrastructure. In addition, you will need to determine what sizing ratio to use between the test, staging and production environments. In an ideal world you would simply replicate production for test and staging, but that may be too expensive.
Instead you can consider scaled down environments as illustrated below:
The key is to then appropriate scale down the performance metrics as well, for example a test environment that has 10% of the resources of production should be tested with no more than ~ 10% of the load that the production environment would expect. Note that you need to be careful with this assumption as the performance scaling may not be linear.
The main elements of load testing execution are as follows:
As you move to configure your load testing, it is important to consider the traffic pattern of your tests. Will your testing be satisfied by simple and repetitive "hammering" of specific pages or APIs? Or will you need something more dynamic and sophisticated, typically accomplished through scripting of logic and execution flows? Or will you rather want to test using true replication and replay of real-world traffic?
As you move to make your load testing more structured, define your testing of the various pages and services in composable scenarios. Consider using traffic shaping to model ramp-ups/ramp-downs, adding multiple scenarios to your test, distributing the traffic proportionally according to your understanding of endpoint distribution. Also, if your choice of load testing tooling and infrastructure supports global distribution of traffic, consider using cloud-based load generators based upon your understanding of geographic distribution of your incoming traffic.
We recommend composing your load tests into reusable modules or scenarios, where each scenario typically tests an individual page, API endpoint or distinct user workflow. This scenario can then be used standalone to validate serviceability of that particular page, and/or be used as one of many scenarios in a more complex configuration where performance and scalability of the overall system is looking to be characterized when used in a more real-world production setup.
Once you have a testing setup that models your SLAs and can satisfy your load testing goals, consider integrating execution of your tests into your existing CI/CD infrastructure and integrated into a test management tool such as SpiraTest:
In summary, software load testing is about ensuring that your application can handle its intended load with efficiency, stability, and speed, leading to a better user experience, more reliable performance, and informed infrastructure investment.
And if you have any questions, please email or call us at +1 (202) 558-6885