What exactly is Performance Testing?
Firstly, let’s talk about what is performance testing and how we integrate it into the software development life cycle. Performance testing is a non-functional testing technique that evaluates the performance of the software, and whether the system will withstand different types of loads. With the execution of different types of performance tests, we can measure the response time of the system. They can also help us define the system’s stability, scalability, reliability and data transfer.
The main idea of performance testing is to identify the most critical points and bottlenecks in the system. Most importantly, it reveals further optimization needs before the software goes live. While working on a software project, we start the performance testing in parallel with Software Development Life Cycle. We start off by defining the requirements and analysis and then creating the test strategy. We design the performance tests and execute them at a later stage and analyze the results.
Different types of Performance Testing
Performance testing includes the following main types:
- Load Testing
- Stress Testing
- Spike Testing
- Soak Testing
- Volume Testing
It tests the software with various numbers of simulated users under different load values. This type of testing can help us in a lot of ways. We can measure the response of the system by increasing users in order to verify if it can handle expected traffic. To test the software functionalities by measuring the response time, stability, throughput and the health of the servers. In other words, the objective of Load Testing is to test the system’s behaviour during its peak and to monitor the productivity with the maximum expected users.
It tests the software’s stability and reliability under extremely heavy loads. It also helps to identify the breaking points. Stress testing can be done by increasing the concurrent users far beyond what is permissible from the initially expected traffic. The objective is to verify the recovery mechanism in case of failures due to enormous amounts of users or any kind of different traffic.
Spike Testing is similar to Stress Testing, but the way and the test approach are different. With spike testing, we test the software by simulating enormous sudden traffic in the software, which in business scenarios is real-life events, like product promotions, discounts, black Fridays, etc. The objective is to verify the capacity of the software if it is able to handle sudden spikes without any performance deviations.
It tests the software under heavy load for an already defined period of time. For example, we can perform such performance tests for 4 hours incessantly with defined concurrent users. The objective of the Soak Testing is to identify bottlenecks by protracted use of the software, to identify issues like database timeouts, connections, memory leaks, etc.
It tests the software with a heavy amount of data. The main idea of Volume Testing is to test the stability of the database. To test and monitor the performance of the database with heavy amounts of data with different CRUD operations (create, read, update and delete.) The objective of the Volume Testing is to identify the bottlenecks in the database and its stability and limits.
Steps to consider before starting the Performance testing
First of all, the most important step is to prepare a test environment that should mimic the production environment. If there are differences between the test environment and the production environment, the executed performance tests and their results will not be valid! The second thing is the acceptance criteria. Most probably the discussions about the acceptance criteria will take place with systems users, business, and project team along with the technologies in the current software. The metrics that can be measured can be varied a lot, depending on the software and its context.
After the acceptance criteria are set, we need to Design the actual performance tests. It’s really important to understand the pattern that the software is used. Discuss with the team all the testing scenarios and write them into tests with actual test data. We already talked about setting the environment in which the performance tests will be run, but we didn’t mention anything regarding the notifications from the tests. Set dashboards, alarms and messages for easier result monitoring and reading.
After we have all the preparations for the execution of tests, it’s time to execute them. It’s a good practice to first run the tests with a small amount of data to validate the results. After that, we can proceed with the execution and the actual data that is specified in the test plan. Last but not least, analyze the received results. It’s very important to analyze the results carefully, because only after that will the full benefit of the performance tests come.
Performance Testing is an inseparable part of the Testing phase. Executing performance tests and doing optimization in order to speed up the software product will satisfy the end-user and project investors.
And remember… The performance tests and the identified bottlenecks require time for fixing. It’s not some refactoring that can be done within an hour or two. It requires time, research, discussion, planning, fixing the performance issues and re-testing.