Performance Testing is used to evaluate measurable performance characteristics of a software program. The process of performance testing can involve measuring of response time or the number transactions at which a system functions, but other attributes such as reliability, scalability and interoperability may also be evaluated.
Although performance testing is often carried out in conjunction with stress testing the two should not be confused as the former is only meant to discover how the system or program behaves under normal loads and circumstances, not when under heavy usage or duress, which is the area stress testing is concerned with.
When carried out effectively, performance testing can identify the nature or location of a software-related performance problem and carries a number of benefits including identification of usability problems which might not have been uncovered by less formal testing, as well as obtain metrics as to how users perceive the effectiveness and efficiency of the program, as well as their satisfaction with it.
Given that the workloads of most systems are somewhat random, it is very difficult to accurately create test conditions to resemble expected actual use, however, this should not stop you from trying to paint an accurate picture of what usage is expected from the software, as it can only help in your assessments.
Ultimately, the benefits of performance testing can attain a number of goals, including demonstrating that the system meets performance criteria, comparing two systems to see which performs better or provide measurements of which parts of the system perform badly under a given workload.
The fact that performance testing is so multi-faceted underlines that you should always ask yourself “why are we performance testing?” before starting out with anything.
Various types of testing belong under the umbrella of ‘performance testing’. Among these we usually include the following:
Load testing is one of the simplest forms of performance testing and is usually conducted to understand the behaviour of the system under a specific expected load, for example, the amount of concurrent users on the application performing a specific number of functions within a set duration.
As mentioned above, we normally use stress testing to understand the system’s limits and at which point these are exceeded. Stress testing is especially helpful in determining whether the system will perform in a satisfactory manner if the current load goes well above the expected maximum.
Endurance testing, occasionally also called ‘soak testing’ essentially involves putting a significant load onto the system for an extended period of time, the goal being to discover how the system behaves under sustained use.
Spike testing is aimed at determining whether system performance will suffer by sudden and dramatic changes in load. This is often carried out by suddenly increasing the number of users or the load generated by them and observing the system’s behaviour.
Configuration tests are not concern with the load on the system as such, and rather aim to determine the effects on the system’s performance brought about by any configuration changes to the system’s components.