Chapter 2 – Types of Performance Testing
Performance Testing Guidance for Web Applications
J.D. Meier, Carlos Farre, Prashant Bansode, Scott Barber, and Dennis Rea
Microsoft Corporation
September 2007
Objectives
- Learn about various types of performance tests.
- Understand the values and benefits associated with each type of performance testing.
- Understand the potential disadvantages of each type of performance testing.
Overview
Performance testing is a generic term that can refer to many different types of performance-related testing, each of which addresses a specific problem area and provides its own benefits, risks, and challenges.
This chapter defines, describes, and outlines the benefits and project risks associated with several common types or categories of performance-related testing. Using this chapter, you will be able to overcome the frequent misuse and misunderstanding of many of these terms even within established teams.
How to Use This Chapter
Use this chapter to understand various types of performance-related testing. This will help your team decide which types of performance-related testing are most likely to add value to a given project based on current risks, concerns, or testing results. To get the most from this chapter:
- Use the “Key Types of Performance Testing” section to make a more informed decision about which type of testing is most relevant to your specific concerns, and to balance the trade-offs between different test types.
- Use the “Summary Matrix of Benefits by Key Performance Test Types” section to ensure that you consider not only the benefits of a particular type of tests, but also the challenges and areas of concern that are likely to not be addressed adequately by that type of performance test.
- Use the “Additional Concepts / Terms” section to become more aware of additional types of performance testing that may add value to your project, and to improve your ability to engage in conversations about performance testing with people outside of your specific context.
Performance Testing
Performance testing is defined as the technical investigation done to determine or validate the speed, scalability, and/or stability characteristics of the product under test. Performance-related activities, such as testing and tuning, are concerned with achieving response times, throughput, and resource-utilization levels that meet the performance objectives for the application under test. Because performance testing is a general term that covers all of its various subsets, every value and benefit listed under other performance test types in this chapter can also be considered a potential benefit of performance testing in general.
Key Types of Performance Testing
The following are the most common types of performance testing for Web applications.
Term |
Purpose |
Notes |
Performance test |
To determine or validate speed, scalability, and/or stability. |
|
Load test |
To verify application behavior under normal and peak load conditions. |
|
Stress test |
To determine or validate an application’s behavior when it is pushed beyond normal or peak load conditions. |
|
Capacity test |
To determine how many users and/or transactions a given system will support and still meet performance goals. |
|
The most common performance concerns related to Web applications are “Will it be fast enough?”, “Will it support all of my clients?”, “What happens if something goes wrong?”, and “What do I need to plan for when I get more customers?”. In casual conversation, most people associate “fast enough” with performance testing, “accommodate the current/expected user base” with load testing, “something going wrong” with stress testing, and “planning for future growth” with capacity testing. Collectively, these risks form the basis for the four key types of performance tests for Web applications.
Summary Matrix of Benefits by Key Performance Test Types
Term |
Benefits |
Challenges and Areas Not Addressed |
Performance test |
|
|
Load test |
|
|
Stress test |
|
|
Capacity test |
|
|
Although the potential benefits far outweigh the challenges related to performance testing, uncertainty over the relevance of the resulting data — based on the sheer impossibility of testing all of the reasonable combinations of variables, scenarios and situations — makes some organizations question the value of conducting performance testing at all. In practice, however, the likelihood of catastrophic performance failures occurring in a system that has been through reasonable (not even rigorous) performance testing is dramatically reduced, particularly if the performance tests are used to help determine what to monitor in production so that the team will get early warning signs if the application starts drifting toward a significant performance-related failure.
Additional Concepts / Terms
You will often see or hear the following terms when conducting performance testing. Some of these terms may be common in your organization, industry, or peer network, while others may not. These terms and concepts have been included because they are used frequently enough, and cause enough confusion, to make them worth knowing.
Term |
Notes |
Component test |
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. |
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. |
Smoke test |
A smoke test is the initial run of a performance test to see if your application can perform its operations under a normal load. |
Unit test |
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. Commonly tested modules include functions, procedures, routines, objects, methods, and classes. Performance unit tests are frequently created and conducted by the developer who wrote the module of code being tested. |
Validation test |
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. |
Summary
Performance testing is a broad and complex activity that can take many forms, address many risks, and provide a wide range of value to an organization.
It is important to understand the different performance test types in order to reduce risks, minimize cost, and know when to apply the appropriate test over the course of a given performance-testing project. To apply different test types over the course of a performance test, you need to evaluate the following key points:
- The objectives of the performance test.
- The context of the performance test; for example, the resources involved, cost, and potential return on the testing effort.