The goal of performance testing is not to find bugs, but to eliminate bottlenecks and establish a baseline for future regression testing. To conduct performance testing is to engage in a carefully controlled process of measurement and analysis. Ideally, the software under test is already stable enough so that this process can proceed smoothly.
For a Web application, user need to know at least two things:
(1)expected load in terms of concurrent users or HTTP connections.
(2) acceptable response time Once user know where you want to be, you can start on your way there by constantly increasing the load on the system while looking for bottlenecks.
To take again the example of a Web application, these bottlenecks can exist at multiple levels, and to pinpoint them user can use a variety of tools. When the results of the load test indicate that performance of the system does not meet its expected goals, it is time for tuning, starting with the application and the database. User want to make sure that code runs as efficiently as possible and database is optimized on a given OS/hardware configurations.
Load testing as a part of the process of performance testing and tuning. In that context, it meant constantly increasing the load on the system via automated tools. For a Web application, the load is defined in terms of concurrent users or HTTP connections. In the testing literature, the term "load testing" is usually defined as the process of exercising the system under test by feeding it the largest tasks it can operate with. Load testing is sometimes called volume testing, or longevity/endurance testing.
Examples of volume testing:
(1) testing a mail server with thousands of users mailboxes
(2) testing a client-server application by running the client in a loop against the server over an extended period of time Although performance testing and load testing can seem similar, their goals are different.
On one hand, performance testing uses load testing techniques and tools for measurement and benchmarking purposes and uses various load levels. On the other hand, load testing operates at a predefined load level, usually the highest load that the system can accept while still functioning properly.
Note that load testing does not aim to break the system by overwhelming it, but instead tries to keep the system constantly humming like a well-oiled machine.
Stress testing tries to break the system under test by overwhelming its resources or by taking resources away from it (in which case it is sometimes called negative testing). The main purpose behind this madness is to make sure that the system fails and recovers gracefully -- this quality is known as recoverability. Where performance testing demands a controlled environment and repeatable measurements, stress testing joyfully induces chaos and unpredictability.
To take again the example of a Web application, here are some ways in which stress can be applied to the system:
(1)double the baseline number for concurrent users/HTTP connections
(2)take the database offline, then restart it
(3) rebuild a RAID array while the system is running
(4)run processes that consume resources (CPU, memory, disk, network) on the Web and database servers
http://agiletesting.blogspot.com/2005/02/ performance-vs-load-vs-stress-testing.html http://www.getphillips.com/eps.html