Stress testing is the process of placing a software system under adverse conditions to determine its ability to maintain a certain level of effectiveness. Our process involves quantitatively analyzing the system by keeping a detailed account of the frequency of errors and system crashes. We also evaluate the system qualitatively for factors such as availability or resistance to denial-of-service (DoS) attacks. When evaluating a system under a stress test, the adverse environment deliberately created and maintained includes:
We basically try to crash the system under test by tying up its resources or removing resources from it. Our objective is to ensure that when the system fails, it recovers gracefully in an attempt to measure the system's recoverability.
We verify that when a system failure occurs, the product is able to save its state and recover using this saved state and that it does not hang or crash suddenly. We check whether the error causing the failure is reported to the user properly. We also check whether these failures compromise the security of the system or not.
- Overloading the system with several resource intensive applications to stretch it beyond its load limit
Hacking into a system for using it to spread spam
- Sending large number of useless e-mail messages to the server
Load testing is usually the step preceding stress testing conducted to gauge the maximum load the system can sustain without changing its operating characteristics. While performing load testig services, we use state-of-the-art testing tools from the leading manufacturers to create scripts to continuously increase the load on the system till the performance level drops. We have built our own frameworks using Open Source technologies and also leverage the cloud for our performance testing efforts. For more details, please visit our Knowledge Center.
We do not try to break the system as in stress testing but try to make sure that the system operates smoothly at all points of time, over a much longer duration of test execution. For achieving this smooth operation constantly, we determine and define the highest load that the system can take and perform testing at this load level for a large number of test cases operating on a larger dataset. A number of bugs do not come to the fore unless we deal with a large dataset.
Our stress and load tests are executed by loading the system with typical patterns to verify a list of system specifications such as Application Response Time, Bandwidth used, Hits per second on the system, and Transactions per second/throughput carried out by the system.