What is Performance Testing?
Performance testing, a non-functional testing technique performed to determine the system parameters in terms of responsiveness and stability under various workloads. Performance testing measures the quality attributes of the system such as scalability, reliability and resource usage.
Performance testing is the process of determining the speed or effectiveness of a computer, network, software program or device. This process can involve quantitative tests done in a lab, such as measuring the response time or the number of MIPS (millions of instructions per second) at which a system functions. Qualitative attributes such as reliability, scalability and interoperability may also be evaluated. Performance testing is often done in conjunction with stress testing.
Performance testing can verify that a system meets the specifications claimed by its manufacturer or vendor. The process can compare two or more devices or programs in terms of parameters such as speed, data transfer rate, bandwidth, throughput, efficiency or reliability.
Performance Testing Techniques:
Load testing is a type of performance test where the application is tested for its performance on normal and peak usage. Performance of an application is checked with respect to its response to the user request, its ability to respond consistently within accepted tolerance on different user loads.
The key considerations are:
- What is the max load the application is able to hold before the application starts behaving unexpectedly?
- How much data the Database is able to handle before system slowness or the crash is observed?
- Are there any network related issues to be addressed?
Stress testing is the test to find the ways to break the system. The test also gives the idea for the maximum load the system can hold.
Generally Stress testing has incremental approach where the load is increased gradually. The test is started with good load for which application has been already tested. Then slowly more load is added to stress the system and the point when we start seeing servers not responding to the requests is considered as a break point.
During this test all the functionality of the application are tested under heavy load and on back-end these functionality might be running complex queries, handling data, etc.
The following questions are to be addressed:
- What is the max load a system can sustain before it breaks down?
- How is the system break down?
- Is the system able to recover once it’s crashed?
- In how many ways system can break and which are the weak node while handling the unexpected load?
Volume test is to verify the performance of the application is not affected by volume of data that is being handled by the application. Hence to execute Volume Test generally huge volume of data is entered into the database. This test can be incremental or steady test. In the incremental test volume of data is increased gradually.
Generally with the application usage, the database size grows and it is necessary to test the application against heavy Database. A good example of this could be a website of a new school or college having small data to store initially but after 5-10 years the data stores in database of website is much more.
The most common recommendation of this test is tuning of DB queries which access the Database for data. In some cases the response of DB queries is high for big database, so it needs to be rewritten in a different way or index, joints etc need to be included.
Is the application capable of meeting business volume under both normal and peak load conditions?
Capacity testing is generally done for future prospects. Capacity testing addresses the following:
- Will the application able to support the future load?
- Is the environment capable to stand for upcoming increased load?
- What are the additional resources required to make environment capable enough?
Capacity testing is used to determine how many users and/or transactions a given web application will support and still meet performance. During this testing resources such as processor capacity, network bandwidth, memory usage, disk capacity, etc. are considered and altered to meet the goal.
Online Banking is a perfect example of where capacity testing could play a major part.
Reliability Testing or Recovery Testing – is to verify as to whether the application is able to return back to its normal state or not after a failure or abnormal behavior- and also how long does it take for it to do so(in other words, time estimation).
An online trading site if experience a failure where the users are not able to buy/sell shares at a certain point of the day (peak hours) but are able to do so after an hour or two. In this case, we can say the application is reliable or recovered from the abnormal behavior.
- How is the new version of the application performing when compared to previous ones?
- Is any performance degradation observed in any area in the new version?
- What should be the next area where developers should focus to address performance issues in the new version of application?
- Whether the application will able to perform well enough over the period of time.
- Any potential reasons that could slow the system down?
- Third party tool and/or vendor integration and any possibility that the interaction makes the application slower
Attributes of Performance Testing
We have proven record in designing & developing Performance Testing frameworks such as JMeter, Grinder, Locust, WebLoad, LoadRunner, Rational, OpenSTA, JUnitPerf and Telemetry.
Number of clients have partnered with us to assist with their mobile automation, mobile testing, security and performance testing efforts using technologies such as: QTP, QC, LoadRunner, JMeter, Neoload, GreenHat and Open Source Tools like Selenium RC & Webdriver with Java, .Net, Python, Ruby, PHP, JMeter, SoapUI, TestNG, ReportNG, JUnit, Cucumber & Capybara, Tosca, Perfecto and OWASP Security tools.