Performance testing of any application helps in identifying the performance bottlenecks in the application and hence, considered very critical to the success of any application.
In performance testing, we not only measure the response time of the application but also several other quality attributes like – stability, reliability, robustness, scalability, resource utilization, etc.
What is Performance Testing?
Performance testing is a type of a non-functional software testing technique in which the performance of an application is evaluated under simulated expected or higher than expected workload.
So basically in performance testing, we try to simulate the real-world load using some performance testing tools like JMeter. These tools help us in creating virtual users that perform different operations on the application, thus simulating the actions of real-world users.
Types of Performance Testing
Load testing is a type of performance testing in which the performance of the application is evaluated under the expected load. In a load test, we evaluate different performance parameters like – response time, load on server i.e. throughput and the error rate observed during load test execution.
Stress testing is a type of performance testing in which the performance of the application is evaluated under the load much higher than the expected or the anticipated load. This helps in measuring the break-even point of the application – the load at which the application doesn’t respond correctly.
Endurance testing is also referred to as ‘Soak Testing’. In endurance testing, the application under test is subjected to continuous load for a long duration like 2-3 days. This helps in uncovering the memory leakage issue in the application.
Spike testing includes subjecting the application to a sudden burst of virtual users. This helps in checking if the application can recover from any issues after the sudden spike in the number of concurrent users.
In Volume testing, we feed the application with a large volume of data. Now, this can be done either by inserting a high volume of data in the database or depending on the application or functionality – uploading a large file for processing.
Want to know more about the performance testing types in detail along with examples, check our tutorial – Performance Testing Types.
Why is Performance Testing required?
- Helps in checking the reliability of the application
Different types of performance tests are conducted to check if the application is reliable and provides correct and consistent output. Performance tests like – load test and endurance test help in evaluating the system correctness under the expected workload for a predefined time(load test) or large durations(endurance testing).
- Helps in identification of performance bottlenecks
Performance tests help in the identification of the performance bottlenecks in the application that slow down the system. Later on, these components can be optimized for performance, resulting in an improvement in the overall system.
- Helps in evaluating the scalability of the application
On running performance tests with a different number of concurrent users, we can check if the application is capable of scaling up to a higher number of users. This also helps in finding the adequate infrastructure/server requirement for the system.
- Helps in checking the robustness of the application
With stress testing, we can check the robustness of the application at a workload higher than expected. This helps in knowing the upper limit or the break-even point to which application can handle concurrent users without getting crashed.
Performance Testing Process
Planning and execution of a performance test require a different set of activities that are common to every performance test irrespective of the tool we use. Following is a step by step guide to plan and execute a load test.
1. Performance test scenarios
First of all, we select the test scenarios that are required to be performance tested. Normally, instead of picking all the functional test scenarios of the application, we only pick the scenarios that have very high volume or the scenarios that will be performed by a relatively large number of users. A sample test scenario can be-
- Launch the application
- Think Time
- Enter valid credentials and click on the Login button
- Think Time
- Perform some activity on home page
- Think Time
- Click on the Logout button
Here, the Think time or the Wait time is the time user takes in going through the web page once it loads; the time taken to fill the forms like login form, user registration form, entering data in the search fields, etc. This time is variable depending on the underlying action e.g. think time while filing a large form can be over 10 seconds while Think time to just fill the login credentials can be 2 to 3 seconds only.
2. User Distribution
Once the scenarios are identified, the next step is user distribution. Here, we assign users to different scenarios. For example, while doing performance testing of an email application, we can distribute user to different scenarios like-
- User reading an unread mail scenario – 50% of users
- Compose email – 30% users
- Delete email – 18% users
- User registration – 2% users
Scripting is done with a load test tool like – Load Runner, JMeter, Silk Performer, etc. These tools simulate the actions performed by users. We script the scenarios identified and assign users to them as per user distribution is done.
4. Dry run
Before actually starting the load test with a predefined number of users, we do a dry run of the application assigning 1 or 2 users to each scenario and checking whether everything is working fine.
5. Running the test and analyzing the results
After the dry run and making sure that the scripts are working fine, we start with the actual load test. The load test can be made to execute for predefined time or iterations e.g. a load test can be scheduled for ‘n’ minutes or ‘m’ iterations per user.
After the load test execution, its result is analyzed. Some of the open-source tools might not have very good inbuilt control for the interpretation of test results. In those cases, one may need to use plugins or other tools to include more advanced or graphically intuitive interpretation.
Performance Testing Tools
Before starting with the different performance testing tools available in the market. Let’s first see, the different criteria that need to be considered while selecting a performance test tool.
- Application type – One of the basic things to consider while selecting a tool is the type of application to be tested – website, web services – REST/SOAP or protocol to be tested – HTTP, FTP, LDAP, JDBC, etc. For example, for performance testing of a SOAP web service, we might prefer selecting a tool like LoadUI which is custom made for load testing of SOAP web services.
- Project Budget – Based on the budget allocated for performance testing, we need to choose between the different free and paid tools.
- Test Specific Requirement – The specific requirements of a performance test are also considered while selecting a test tool e.g. there may be a requirement of performing load test with 10000 users, many available tools do not effectively support this much load. Hence, a tool capable of effectively carrying out the requirements of the performance test should be selected.
- Programming expertise for scripting – The knowledge of any programming language or any sort of programming expertise also matters while selecting a tool. While we do have some tools that simply work on record and playback principle but others do require a fair bit of programming knowledge.
Now, let’s check some of the widely used performance testing tools.
- Apache JMeter – JMeter is one of the most widely used performance testing tools. Since it is free and open-source, hence it is used in organizations ranging from startups to big enterprises. The only downside is it has a slightly steeper learning curve as compared to other tools. Download link – JMeter Download
- LoadRunner – LoadRunner is a performance testing tool developed by Micro Focus. It is a paid tool but also comes with a free community version that supports up to 50 virtual users for load testing. Download link – LoadRunner Download
- WebLOAD – WebLOAD is a performance testing tool provided by RadView. It is again a paid tool and similar to Loadrunner it provides a free edition with 50 virtual users for load testing. Download link – WebLOAD Download
- LoadNinja – LoadRunner is also a paid tool for performance testing. Unlike most of the other paid and free tools, it very simple and fast as it requires no complex scripting instead it works with real browsers on the cloud. Download link – LoadNinja Plans
- Locust – Locust is a free and open-source performance testing tool that requires scripting in Python. It supports performance test execution on multiple distributed machines. Download link – Locust Installation Instruction
- NeoLoad – Neoload is a paid tool for performance testing. It greatly reduces the scripting time and complexity with its drag & drop and record & playback feature. Apart from that it also supports Selenium scripts that again helps, in case you use Selenium for test automation. Download link – NeoLoad Download
Want to know more about the tools along with their in-depth review, check our post – Performance Testing Tools.
This concludes our tutorial on performance testing. Do check our JMeter tutorial section for a free step by step tutorial for learning the most popular performance testing tool – Apache JMeter.
Over to you now
I hope we have covered the basics of performance testing here. I’m happy that you made it to the end of this article. So, now what?
As stated above I highly recommend, checking out our JMeter tutorial. I would love to know if the tutorials help you with your testing journey.
Kuldeep is the founder and lead author of ArtOfTesting. He is skilled in test automation, performance testing, big data, and CI-CD. He brings his decade of experience to his current role where he is dedicated to educating the QA professionals. You can find him on LinkedIn.