Stress testing is a type of performance testing technique in which the software system is subjected to extreme load conditions to check its stability, robustness, error handling and recovery. It stresses the system beyond its normal capacity to reach its breaking point. It is a Non-Functional intensive testing technique. In other words, in stress testing, the software system is monitored under extreme workload conditions for its behavior and stability.
It also evaluates the recovery of the system after breaking it. It establishes if the system was able to recover in an acceptable duration to its stable state. Further, it verifies the data robustness of the system as well.
Why Stress Testing
The stress testing is an important performance test because it helps identify several parameters like
- It calculates the breaking point of the system. Hence, helps to determine the normal workload range of the product.
- It checks the system behavior and performance during and after failures or breakdown.
- One other important purpose is to verify the error messages which the system throws when it collapses.
- It verifies the database before and after the system failure under extreme loads.
- Stress testing confirms that the system behaves as per the specifications even during exceptional operational conditions.
- It validates the recovery of the system after failures.
Stress testing scenarios
As stress testing targets to create random events for the system to measure its stability during the abnormal conditions.
- More than maximum numbers of users using the same functionality of the system.
- A very big file download or upload from the system.
- Various users performing risky operations of the product simultaneously.
- Unavailability of servers or database or hardware.
How to perform stress testing
Firstly, the project’s performance requirements should be analyzed. These requirements are different from functional ones and dictate the scalability and performance of the system like maximum and minimum workload before breaking, response time and throughput.
Next stage is to plan for stress testing. The planning includes what is going to be the test schedule, environment, resources, and scenarios. The availability of resources is evaluated. The decision on exit criteria should also be made.
After deciding what test scenarios should be covered it is time to select the most suitable tool. The criteria to consider are cost-effectiveness, test case coverage, and the tool’s learning curve. The teams comfort level with the tool is important.
Test Case Execution
After all the setup, test cases can be executed. The tool can either generate the scripts for sending the load or QA team can write the scripts in the tool. These test scripts send the heavy payload and tool records applications behavior.
Test Results analysis
The QA testers and other stakeholders analyze the test results conformance with the performance requirements. Next, they identify the deviations from the benchmarks. The important test metrics under consideration for stress testing are
- Response time: It is an important parameter to measure the performance of the system under stress. By definition, it is the total time after sending the request until the client gets the response.
- Throughput: It shows the amount of data in bytes that the acting users in tool receive from the server per second.
- The number of transactions passed/failed: It calculates the total number of transactions passed or failed in a given time.
- Load size: The load size is the number of virtual users trying to access the application simultaneously at a particular time period.
- CPU utilization: This parameter shows the total CPU time used by the application while processing the request. In stress testing, it shows the CPU utilization during peak loads.
- Memory utilization: It represents the amount of memory used by the application while processing user requests.
Fixing and Retesting
After the test result analysis, the bottlenecks are identified. Now the product is enhanced with environment settings, hardware or code changes to meet the performance goals and specifications.
Tools for Stress Testing
- Apache JMeter: It is a Java-based open source tool which can simulate heavy loads on software applications to test stability and performance under different load types.
- HP LoadRunner: It is an end to end system performance testing tool which is very effective in identifying and resolving performance issues.
- Smartbear LoadComplete: It is a popular tool for load and stress testing. This tool can also test scalability for websites and web applications. Moreover, it generates various load level and doesn’t require coding skills. It can produce both secure and non-secure traffic for testing.
- NeoLoad: It simulates user actions for testing web and mobile apps. It provides fast recording and Selenium script conversion for C# developers.
Difference between Stress and Load testing
In the last article, we have read about Load Testing. You can go through if you want to learn more.
|Stress Testing||Load Testing|
|Stress testing subjects AUT to the extreme workload which is beyond its normal working capacity||Load Testing subjects the AUT to workload within its operational limits|
|It calculates the system performance during break down and its recovery condition||On the other hand, load testing calculates system performance under normal working conditions|
|It tries to break the system||It targets to ensure the system is stable and robust when in expected workload.|
Stress testing is a common performance testing technique to check the product under extreme conditions. Stress testing verifies the system usage of resources, database, servers, error messages under extreme workloads which are beyond the normal capacity of the product. It also tries to break the system and observes it during failure and recovery. Such exceptional situations can occur in the production environment. Hence, it is important to verify the behavior of the system in these scenarios so that nothing unexpected happens.