What is Performance Testing?
Performance testing is a software testing procedure used to evaluate a software system's responsiveness, stability, reliability, and scalability.
In performance testing, the software is subjected to various time-varying loads. The software's response to these multiple loads helps to identify and remove bottlenecks.
Performance testing is a type of non-functional testing.
An Analogy
The transport department has built a new road between two nearby cities A and B with multiple entrances and exits. Performance testing will help answer questions like:
- How many cars can the road handle at maximum?
- What happens when the traffic spikes on holidays between 8 AM and 10 AM?
- What is the traffic during office hours between 8 AM and 10 AM and 6 PM and 8 PM every weekday?
- How will the situation change ten years when the number of cars grows by 15%?
- Depending on these answers, the department can make specific changes to the road to ease commuters' lives.
Performance monitoring
The following parameters are usually monitored during performance testing:
- CPU Utilization
- Memory Utilization
- Disk utilization
- Network utilization
These parameters are measured on all servers that participate in sending the response to end-users. For example, in a web-based application, engineers will monitor the front-end, back-end, and database servers.
The above parameters, when correlated with the input load on different servers, reveal bottlenecks. For example, if the CPU utilization on the front-end servers during peak load is close to 100%, it means that either the front-end code is inefficient or the CPUs need an upgrade. On the other hand, if the disk utilization on the database servers is close to the limit, it probably means that the SQL is inefficient, the indices are missing, or the server needs better disks.
Types of Performance Testing
There are many types of performance testing, each with its unique purpose. Let's look at each of them with some real-world examples.
Load Testing
Load testing is the most common type of performance testing. In this testing, you measure the application's performance under various loads, typically combining actual and simulated concurrent end-users. Load testing includes measuring responsiveness during regular and peak loads. The application should be responsive and pass the performance criteria set in the specifications.
Stress Testing
In stress testing, you observe the system's response and stability under extreme loads - loads that are well above the expected maximum. It is required that the software does not crash and reports errors gracefully. Stress testing helps administrators to understand the upper limits of the system.
Spike Testing
In spike testing, you observe the system's behavior after suddenly increasing and then decreasing the load generated by many users.
In spike testing, you increase the number of users by a substantial amount in a short time and monitor the system's performance. The aim is to check whether the system will be able to perform satisfactorily.
For example, if an e-commerce website intends to launch a Black-Friday Midnight sale, conduct spike testing is prudent to ensure its success.
Soak Testing
Soak testing, also called endurance testing, is used to test the system's responsiveness, stability, and reliability under continuous load that much higher than average. The system should be fast for end-users, not be very heavy on the hardware and network utilization and be reliable.
Configuration Testing
In configuration testing, rather than observing the effects of loads on end-users, you check whether the performance-related configurations in the software work as expected. For example, suppose you configure the software to auto-deploy a load balancer once the server CPU reaches 60% utilization. In this type of testing, you increase the CPU load above that threshold and verify that a new load balancer is deployed.
Internet Testing
In Internet testing, you test the application's responsiveness from various locations across the globe. This testing is specific to internet-based software applications that have a worldwide audience.