Performance testing is used to verify that an application is able to perform under expected and peak load conditions, and that it can scale sufficiently to handle increased capacity. There are many kinds of Performance test which can be executed to gauge individual performance aspects of an application. 

Performance Test Type: Capacity
Definition: Capacity Testing is usually done to provide actual data that can aid in capacity planning. Capacity planners can use this data to validate or enhance their models and/or predictions
Objective of Test is to determine: Is system capacity meeting business volume under both normal and peak load conditions?

Performance Test Type

Definition

Objective of Test is to
determine:

Capacity

Capacity Testing is usually done to provide
actual data that can aid in capacity planning. Capacity planners can use this
data to validate or enhance their models and/or predictions

Is system capacity meeting business volume
under both normal and peak load conditions?

Component

A component test is any performance test that
targets an architectural component of the application. Commonly tested
components include servers, databases, networks, firewalls, clients, and
storage devices.

Is this component meeting expectations?

Is this component reasonably well optimized?

Is the observed performance issue caused by
this component?

Endurance

Endurance testing is usually done to
determine if the system can sustain the continuous expected load. During
endurance tests, memory utilization is monitored to detect potential leaks

Will performance be consistent over time?

Are there slowly growing problems that have
not yet been detected?

Is there external interference that was not
accounted for?

Investigation

Investigation is an activity based on
collecting information related to the speed, scalability, and/or stability
characteristics of the product under test that may have value in determining
or improving product quality. Investigation is frequently employed to prove
or disprove hypotheses regarding the root cause of one or more observed
performance issues.

Which way is performance trending over time?

To what should I compare future tests?

Load

 A load
test is usually conducted to understand the behaviour of the system under a
specific expected load

How many users can the application handle
before undesirable behaviour occurs when the application is subjected to a
particular workload? How much data can my database/file server handle?

Are the network components adequate?

Smoke

A smoke test is the initial run of a
performance test to see if your application can perform its operations under
a normal load. 

Is this build/configuration ready for
additional performance testing?

What type of performance testing should I
conduct next?

Does this build exhibit better or worse
performance than the last one?

Spike

Spike testing is done by suddenly increasing
the number of, or load generated by, users by a very large amount and
observing the behaviour of the system. The goal is to determine whether
performance will suffer, the system will fail, or it will be able to handle
dramatic changes in load

What happens if the production load exceeds
the anticipated peak load?

What kinds of failures should we plan for?

What indicators should we look for?

Stress

Stress testing is normally used to understand
the upper limits of capacity within the system. This kind of test is done to
determine the system’s robustness in terms of extreme load and helps
application administrators to determine if the system will perform
sufficiently if the current load goes well above the expected maximum.

What happens if the production load exceeds
the anticipated load? What kinds of failures should we plan for?

What indicators should we look for in order
to intervene prior to failure?

Unit

In the context of performance testing, a unit
test is any test that targets a module of code where that module is any
logical subset of the entire existing code base of the application, with a
focus on performance characteristics.

Is this segment of code reasonably efficient?

Did I stay within my performance budgets?

Is this code performing as anticipated under
load?

Validation

A validation test compares the speed,
scalability, and/or stability characteristics of the product under test
against the expectations that have been set or presumed for that product.

Does the application meet the goals and
requirements?

Is this version faster or slower than the
last one? Will I be in violation of my contract/Service Level Agreement (SLA) if I release?