Endurance testing is a type of non-functional testing in which an application or software product is tested with heavy load for a significant amount of time to estimate its response and behaviour under sustained use. The primary reason behind performing endurance testing is to make sure that the application or software under testing can handle extended load without worsening its response time.
It is performed at the last stage of the performance run cycle. It is a long process and can even last for a year. It may include applying external loads like Internet traffic, user actions, etc. This makes endurance testing unique from load testing.
By endurance, we mean capacity. Thus, endurance testing is sometimes also referred to as capacity testing.
The primary objective is to discover memory leaks.
To discover how the system behaves or responds under sustained usage.
To make sure that the response time of the system remains same or better than in the starting of the test, after using it for a long period of time.
To determine the number of users/transactions that the system under testing can withstand while meeting all the performances goals.
We also need to manage the future loads. For this, we need to understand what and how many additional resources we need to support usage in the future. Endurance testing helps us achieve this. Such resources include processor capacity, disk capacity, memory usage, network bandwidth, etc.
It is usually performed by overloading the system or by decreasing some system resources and then evaluating the results.
Endurance testing is done to make sure that the memory leaks and other bugs do not arise after a specified normal usage period.
We test the following things in Endurance testing −
Test memory leakage − It is checked for verifying whether there is any memory leakage in the application or software that can crash the system or operating system.
Test connection closure between the system layers − In case the connection between the different layers of the system is not closed, the system may crash.
Test database connection closure − Also, if the test database connection is not closed, the system may crash.
Test response time − After a prolonged use, the response time of the system may get delayed. Thus, it becomes essential to test the response time of the application or software.
Test environment − Determine the hardware, software operating systems needed to perform the endurance testing. Assign the roles and responsibilities to the team members. Make sure that the environment is ready before the test execution. Also, determine the common database production size and the annual growth. This is essential because we have to test how the application or software will respond after a year, or two.
Create test plan and test scenarios − On the basis of the nature of the test, plan whether you need manual testing, automation testing, or a combination of both. Also, design the test cases, reviews and test execution. Make sure to include testing to stress the system, break point testing, etc. in the test plan.
Test estimation − Prepare an estimate of how long you need to complete the testing phase. Analyse it keeping in mind the number of testers involved and the number of test cycles needed.
Risk analysis − Analyse the risks involved in the testing process, and take appropriate actions to prevent them. Determine the priority of the test cases on tha basis of the Risk factor and identify the risks mentioned below and the issues that the testing team may face during endurance testing −
Will the performance of the software be consistent with time?
Are there any other issues, even minor, that have yet not been discovered?
Is there any external interference that is not yet addressed?
Test Schedule − Decide the budget, deliverables within time. In endurance testing, a huge yet natural load arrangement of transactions is applied to the system for a prolonged period of time.
Test Execution − In this stage, we finally start the endurance testing.
Test Cycle Closure − In this stage, we close the test cycle on the basis of exit criteria specified in the test planning stage.
Stress testing tests the software or the application to its limits, but endurance testing tests the software or the application to its limits over time.
For example, most complicated problems like memory leaks, database server usage, unresponsive system, etc. occur when the software run for a prolonged period of time. Ignoring or skipping endurance testing is not a smart decision, as the chances of discovering such defects prior to deployment are very low.
Suppose during lockdown, like that due to COVID, banks do not work for a long period of time. During this period, online banking activities will increase than on other business days. Thus, the banking system must be ready to handle and manage an unexpected and massive load.
WebLOAD − This endurance testing tool is developed by RadView. This tool is designed for web applications and is also used for load testing and performance testing. It is compatible with many technologies ranging from web protocols to enterprise apps. WebLOAD offers built-in integration with Jenkins, Selenium, and other tools for DevOps (Development & Operations).
This tool can be used either as an on-premise product or as a fully managed SaaS load testing solution. It is compatible with a range of web protocols, mobile protocols and enterprise protocols through a customizable web dashboard. WebLOAD provides a clear picture of the web application performance, pointing out problems that may occur in our way of achieving the load the response requirements.
LoadComplete − This is an easy-to-use and affordable tool which is also used for performance testing. It helps us in creating and executing real load tests for websites and web applications. It helps create automated load tests by recording the user interactions and simulating them with hundreds of virtual users.
This tool helps check the performance of the web server under a massive load. It also helps determine the robustness and scalability. It provides us detailed reports that provide in-depth insights into the infrastructure, application behaviour, and the experience of the end-users.
Apache JMeter − This open-source testing tool is a Java platform application. It is mainly used as a performance testing tool and can be integrated with a test plan. It can be loaded into a server or network to check its performance and to analyse its functionalities in different conditions.
Initially, it was used for testing the web applications, however now its scope had broadened. JMeter is very useful in testing the functional performance of the resources such as Servlets, Perl Scripts and JAVA objects. JMeter needs JVM 1.4 and higher to run, and works in Unix and Windows operating systems.
LoadRunner − This product from Micro Focus is used for performance testing. It is very useful in understating and determining the performance of the software or application.
LoadRunner can create and manage thousands of users simultaneously. It also helps collect the needed information of the performance with respect to the infrastructure. It consists of different tools, such as Virtual User Generator, Controller, Load Generator and Analysis.
Appvance − This tool is the first unified test automation platform. It eliminates the redundancies created by traditional QA tools that block DevOps teams. It provides integration with Jenkins, Hudson, Rally, Bamboo, Jira, etc. It is also compatible with Selenium, JMeter, Junit, Jython, etc.
LoadUI − This open-source tool allows us to execute complex load tests and check the performance by dragging the different components around. With LoadUI, we can create and update test cases even while executing them. This tool supports Windows, Linux, and Mac OS. It also helps us test the speed and scalability of APIs.
Some of its features include −
OpenSTA − This GUI-based tool is used for benchmarking web servers. It can perform HTTP and HTTPS heavy load tests with performance measurements. It is an open-source tool and runs on Windows OS.
It helps determine how much load the system can handle.
It provides accurate data that can be used to validate and improve the infrastructure requirements.
It discovers the performance problems that may arise after a system has been for a prolonged period of time.
It ensures that the software remains available when there is a huge load in a very short period of time.
It is also used to check whether there is any performance degradation after a prolonged use.
It is difficult to determine how much load is worth applying.
It can cause network or software failures that may cause great disruption if the test environment is not kept isolated.
Over-stressing the system may cause permanent data loss or data corruption.
Even after removing the load, resource usage remains high.
Some application elements may not respond.
Exceptions, if unhandled, may be observed by the end user.