This blog post is the second one in this three-part series. If you want, you can read the first and third parts as well. In the previous blog post, we discussed about load testing and how it is useful in determining the behavior of a given system. Load testing is actually a part of the bigger performance testing framework. With load testing, we can understand how the system will behave under extreme load conditions. But what about all the other moving parts of the system? Extreme load is not the only problem a system can face. How do we understand all the constraints of a system? How can we determine what part of the system is going to misbehave in real time? This is where performance testing comes into picture.
Why do we care about it in the first place?
When you are designing a user facing website, you need to be very careful about all the moving parts of the site. Let’s consider our example in the previous blog post about building a site with photo upload functionality. Let’s say you did load testing and found out that it can nicely handle 10,000 users simultaneously. But what if the photo upload itself takes 10 seconds each time? That can’t be right! There must be something wrong here. These kind of things don’t come up in load testing. You have to specifically design your test suite to check all these functionalities. If you don’t, you can say good-bye to your 10,000 users, and there goes your website into thin air!
What exactly is performance testing?
Performance testing is the testing that is performed to ascertain how the different components of a system are performing under a given situation. Resource usage, scalability and reliability of the product are also validated under this testing. This testing is actually a subset of the broader performance engineering, which is focused on addressing performance issues in the design and architecture of a software product. Designing these tests is actually very critical to the stability of your website.
Where’s the example!
Let’s say you want to test the network performance of your application. It means that you want to test how your application will communicate with the server. One metric would be connection speed vs latency. Connection speed refers to your internet connection speed and latency is the time taken by the data to reach from source to destination. When you click on a link, it opens a webpage after sometime. This time is referred to as latency. The information about your click is sent to the server and the corresponding web page is sent back to you. Thus, if you have a 28kbps mode, a 70kb page would take not more than 15 seconds to load (latency = 1000 milliseconds). If the connection speed is 256kbps, then the page of same size would appear within 5 seconds (latency=100 milliseconds). As we can see, you will have to design your application depending on the constraints you are working with. You cannot have a very data intensive application if you are targeting users who don’t have access to high bandwidth internet connection. Your application will appear sluggish, and nobody will use it.
What will we achieve by the end of all this?
A successful performance testing will project most of the performance issues, which could be related to database, network, software, hardware etc. The primary goal of performance testing includes establishing the benchmark behavior of the system. There are a number of industry-defined benchmarks, which should be met during performance testing. Performance testing does not aim to find defects in the application as such. It actually addresses a bit more critical task of testing the benchmark and the standards set for the application. Accuracy and close monitoring of the performance and results of the test is the primary characteristic of performance testing.