Stress Testing

 Stress Testing

Stress Testing is a type of software testing that verifies stability & reliability of software application. The goal of Stress testing is measuring software on its robustness and error handling capabilities under extremely heavy load conditions and ensuring that software doesn't crash under crunch situations. It even tests beyond normal operating points and evaluates how software works under extreme conditions.

In Software Engineering, Stress Testing is also known as Endurance Testing. Under Stress Testing, AUT(Application under test) is be stressed for a short period of time to know its withstanding capacity. A most prominent use of stress testing is to determine the limit, at which the system or software or hardware breaks. It also checks whether the system demonstrates effective error management under extreme conditions.

The application under testing will be stressed when 5GB data is copied from the website and pasted in notepad. Notepad is under stress and gives 'Not Responded' error message.

Importance of Stress Testing

Consider the following scenarios - 

  • During festival time, an online shopping site may witness a spike in traffic, or when it announces a sale.
  • When a blog is mentioned in a leading newspaper, it experiences a sudden surge in traffic.

It is imperative to perform Stress Testing to accommodate such abnormal traffic spikes. Failure to accommodate this sudden traffic may result in loss of revenue and repute.

Stress testing is also extremely valuable for the following reasons:

  • To check whether the system works under abnormal conditions.
  • Displaying appropriate error message when the system is under stress.
  • System failure under extreme conditions could result in enormous revenue loss
  • It is better to be prepared for extreme conditions by executing Stress Testing.
Load Testing V/s Stress Testing-

Load Testing

Stress Testing

Load Testing is to test the system behavior under normal workload conditions, and it is just testing or simulating with the actual workload

Stress testing is to test the system behavior under extreme conditions and is carried out till the system failure.

Load testing does not break the system

stress testing tries to break the system by testing with overwhelming data or resources.


Types of Stress Testing:

Distributed Stress Testing:

In distributed client-server systems, testing is done across all clients from the server. The role of stress server is to distribute a set of stress tests to all stress clients and track on the status of the client. After the client contacts the server, the server adds the name of the client and starts sending data for testing.

Application Stress Testing:

This testing concentrate on finding defects related to data locking and blocking, network issues and performance bottlenecks in an application.

Transactional Stress Testing:

It does stress testing on one or more transactions between two or more applications. It is used for fine-tuning & optimizing the system.

Systemic Stress Testing:

This is integrated stress testing which can be tested across multiple systems running on the same server. It is used to find defects where one application data blocks another application.

Exploratory Stress Testing:

This is one of the types of stress testing which is used to test the system with unusual parameters or conditions that are unlikely to occur in a real scenario. It is used to find defects in unexpected scenarios like

1.   A large number of users logged at the same time

2.   If a virus scanner started in all machines simultaneously

3.   If Database has gone offline when it is accessed from a website,

4.   When a large volume of data is inserted to the database simultaneously

How to do Stress Testing?

Stress Testing process can be done in 5 major steps:

1.   Planning the Stress Test. Here you gather the system data, analyze the system, define the stress test goals

2.   Create Automation Scripts: In this phase, you create the Stress testing automation scripts, generate the test data for the stress scenarios.

3.   Script Execution: In this stage, you run the Stress testing automation scripts and store the stress results.

4.   Results Analysis: In this stage, you analyze the Stress Test results and identify bottlenecks.

5.   Tweaking and Optimization: In this stage, you fine-tune the system, change configurations, optimize the code with goal meet the desired benchmark.

Lastly, you again run the entire cycle to determine that the tweaks have produced the desired results. For example, it's not unusual to have to 3 to 4 cycles of the Stress Testing process to achieve the performance goals.

Tools recommended for Stress Testing:

LoadRunner

LoadRunner from HP is a widely-used Load Testing tool. Load Test Results shaped by LoadRunner are considered as a benchmark.

Jmeter

Jmeter is an Open Source testing tool. It is a pure java application for stress and Performance testing. Jmeter is intended to cover types of tests like load, functional, stress, etc. It needs JDK 5 or higher to function.

Stress Tester

This tool provides extensive analysis of the web application performance, provides results in graphical format, and it is extremely easy to use. No high-level scripting is required and gives a good return on investment.

Neo load

This is a popular tool available in the market to test the web and Mobile applications. This tool can simulate thousands of users in order to evaluate the application performance under load and analyze the response times. It also supports Cloud-integrated - performance, load and stress testing. It is easy to use, cost-effective and provides good scalability.