Stress testing is a type of software testing activity which is performed to determine the robustness of “mission-critical” software. This test emphasizes on software robustness and its error-handling capabilities under heavy-load circumstances.
Stress software testing is an amalgamation of quantitative and qualitative tests. Done in conjunction with performance testing, stress testing can help one measure the frequency of system crashes and the software’s availability or resistance to DoS (Denial-of-Services) attacks. In simpler terms, stress testing is breaking the system under rigorous tests by increasing or decreasing the resources to boost the software’s recoverability. It is done to ensure that even when the system fails, the data does not get corrupt or lost.
What is Involved in Stress Testing?
Table of Contents
- 1 What is Involved in Stress Testing?
- 2 Stress Testing Process
Stress Testing involves simulation of one or more prime production scenarios under different stressful conditions. For example, one might deploy an application on a server that runs on a processor-intensive application and by doing so, the application is forced to compete with other applications for using the system resources.
Here are a few types of stress testing that are generally involved and practiced while putting an application under stress:
Application Stress Testing:
Focusing on more than one transaction in a system under stress without its component being isolated, Application Stress Testing helps in uncovering defects like network congestion, data blocking and locking, and performance bottlenecks of different methods across the application.
Transactional Stress Testing:
This type of stress testing is aimed at testing the application’s working capability at a transactional level with load volumes that are beyond its anticipated production operations. Such test helps in optimizing, tuning, and finding error conditions at the particular component level.
Systemic Stress Testing:
Also known as Integration or Consolidation Stress Testing, Systemic Stress Testing involves pushing the expected capabilities of multiple applications that run on the same system by generating extreme load conditions. The main goal of this process is to uncover defects in circumstances where different applications block each other to vie for using system resources like memory, disk space, network bandwidth, and processor cycles.
Stress Testing Process
Identification of Test Objectives:
Whether one wants to identify the ways in which an application can fail or analyze an application’s behavior when the system resources are depleted or wants any other desired outcome through the stress testing process, this step involves defining the main objective behind an application’s stress testing.
Establishing of Important Scenarios:
The second step is to identify key focus scenarios which contribute majorly to an application’s success.
Identification of the Workload:
This step involves estimating the amount of workload which should be applied to a particular scenario to stress the system beyond threshold limits thereby, enabling the tester to observe the stress condition’s consequences. Testers can increase load in an incremental manner until a significant failure is created and then observe the application’s behavior under different load conditions.
Identification of Metrics:
By making use of the desired performance characteristics which were identified in the first step, metrics that focus on possible pitfalls for each scenario are identified in this step. The metrics can also provide information about possible problems, besides being related to performance as well as throughput goals.
Creating Test Cases:
In this step, test cases are designed by collating all the information like workload profiles and characteristics, performance objectives, test data and environments, and identified metrics.
After completion of all the above-mentioned steps, the load has to be simulated.
Analyzing the captured data and comparing the results against the accepted level of the metrics is done in this last step. If the required performance levels have not been achieved, fix the cause behind the bottleneck.
Benefits of Stress Testing
- Helps in determination of stability of a given system, beyond its normal operational capacity
- Assures the stakeholders that an application is crash-proof in circumstances where the computational resources are insufficient
- Essential to find race conditions and deadlocks
- Makes it easier to test an application’s concurrency
To reap all the above-mentioned benefits of stress testing, one will have to ensure that the correct methodology is implemented.