Belongs to non-functional testing type. But I get confused between these 2 types of testing.
A web search of the terms resulted in,
Scalability Testing, is the testing of a software application to measure its capability to scale up or scale out in terms of any of its non-functional capability.
Performance, scalability and reliability testing are usually grouped together by software quality analysts.
The main goals of scalability testing are to determine the user limit for the web application and ensure end user experience, under a high load, is not compromised. One example is if a web page can be accessed in a timely fashion with a limited delay in response. Another goal is to check if the server can cope i.e. Will the server crash if it is under a heavy load? 1
Dependent on the application that is being tested, different parameters are tested. If a webpage is being tested, the highest possible number of simultaneous users would be tested. 2 Also dependent on the application being tested is the attributes that are tested - these can include CPU usage, network usage or user experience.
Successful testing will project most of the issues which could be related to the network, database or hardware/software.
Capacity testing: To determine how many users and/or transactions a given system will support and still meet performance goals.
Capacity testing is conducted in conjunction with capacity planning, which you use to plan for future growth, such as an increased user base or increased volume of data. For example, to accommodate future loads, you need to know how many additional resources (such as processor capacity, memory usage, disk capacity, or network bandwidth) are necessary to support future usage levels.
Capacity testing helps you to identify a scaling strategy in order to determine whether you should scale up or scale out.
People in different localities have different understanding of terminologies. Hence you should try to find out what your team or organization thinks of these to be. For me they may be used interchangeably!
The wikipedia definitions quoted by @TESTasy are a good start, but I'll sum them up a bit:
Capacity Testing measures how many users the application can handle. It is a subset of scalability testing, in that when testing scalability, you will get a measure of application capacity.
Scalability Testing measures how well the application handles increasing numbers of users. If you test scalability until the application fails, you will have a measure of how many users (capacity) the application can handle.
Scalability and performance testing is the way to understand how the system will handle the load cause by many concurrent users. In a Web environment concurrent use is measured as simply the number of users making requests at the same time. Performance testing is designed to measure how quickly the program completes a given task. The primary objective is to determine whether the processing speed is acceptable in all parts of the program. If explicit requirements specify program performance, then performance test are often performed as acceptance tests.
As a rule, performance tests are easy to automate. This makes sense above all when you want to make a performance comparison of different system conditions while using the user interface. The capture and automatic replay of user actions during testing eliminates variations in response times.
Scalability testing and capability testing are basically a type of performance testing.
Scalibity Testing-Checking the speed,stability along with load to check a response time is known as scalability testing.
Capable Testing-Testing capable testing is to ensure whether developed software works under different configurations (as stated in requirements documentation). This testing is necessary to check whether the application is capable with client's environment.
Capacity is a measure of how much data a system can process or store before performance becomes unacceptable, for example how many customers can be held on a customer database.
where as Scalability is a measure of how easy it is to increase performance and capacity.
Performance and capacity depends on many factors like:
Software design and configuration. Processor speed. Memory size and speed. Data storage size and speed of access. Network speed.
The effect of these factors can be subtle.
For example: Both latency (time before data is moved) and throughput (amount of data that can be moved per unit time) impact speed.
For example, if a system makes many small accesses across a network, the latency of the network will have a bigger impact than the throughput. System configuration has a big impact. Many devices and software use some form of cache, a local store of commonly accessed data which speeds up overall times. Memory, processors, disks, databases and web servers all use some form of caching. Configuration of caching can have a major effect. Performance and capacity are usually dictated by a limiting factor, or "bottleneck".
For example, if a system is limited by the speed with which data is read from disk, increasing the number or speed of processors will not increase performance.
As load increases toward capacity, systems should cope with excess capacity gracefully. In an online system, this could be achieved by queuing requests to process later, or by cleanly rejecting new requests. But you must avoid the system "grinding to a halt" or failing midway through requests in a way that then undermines the integrity of the data.
This is where Scalability is a serious issue on large systems. There are a number of approaches.
Upgrading to faster hardware. This is known as "scaling high", and works provided that the limiting factor is itself upgraded. Running the system over more servers. This is known as "scaling wide". By splitting the processing down into smaller units, it may be possible to sidestep bottlenecks. The additional need to control the workload between servers adds a new overhead and may itself become a bottleneck.
Planning, modelling, testing and monitoring
Performance and capacity need to be managed throughout the system life cycle. During development, capacity needs to be planned and performance tested. When the system us run live, performance needs to be monitored as do key statistics about capacity such as processor and memory usage. Size systems to meet peak processing requirements, for example the busiest hour on the busiest day.
Because of the difficulties of correctly calculating capacity requirements, many systems end up with capacity that they can never use. Some systems are deployed on expensive hardware that scales well even though the system is not likely to need the additional capacity before the hardware is obsolete. Over-capacity can at times be very wasteful. It is not unusual to find servers that cost tens or hundreds of thousands of pounds that are hardly used.
Technologies like Clustering and Virtualization helps reducing over-capacity.