“Quality means doing it right even when no one is looking.”— Henry Ford
Through my years working as a tester I have found several QA fields that made me love this profession more and more each day. One of those was performance testing. And, of course, as every beginner, I had no clue where to start from (not counting all-mighty Google). Step by step, I was introduced to several tools that can help you measure the performance of your application and, of course, create tests.
To start with this topic, you need to find out what performance testing (also called perf testing) actually is and why it should be done.
Word or two about perf testing
We are all witnesses of rapid growth in IT industry, where applications need to be not only user friendly, look&feel, but very responsive and to give proper data in shortest time possible. Performance is surely an important aspect which should not be ignored. It is necessary to be done before marketing any product.
It is a discipline that involves detecting and reporting the current behavior of an application. With this kind of tests, we validate the responsiveness, speed, scalability, stability of our product. We run the performance tests to check how application behaves under certain/heavy load, to identify and remove so called bottlenecks from an app. So, the goal of this kind of testing is not to find bugs, but to eliminate performance issues, and make our app work better, without performance glitches.
Imagine your app running very slow when several users use it simultaneously or it occurs inconsistencies across different operating systems. Imagine that website of an online store breaks under heavy load on Black Fridays.
What if you are using DB to store data from customer orders, uploaded content, new membership and it slowing down after some time? And catching the memory leak when system begins to degrade over time during increased loads, when available system memory is claimed but never correctly released? Doesn’t sound good, right?
So, the focus of performance testing are next three things:
- Speed – determines whether the application responds quickly
- Scalability – determines maximum user load the software application can handle
- Stability – determines if the application is stable under varying loads
We perform load tests that simulate load (virtual users) in order to detect:
- Bottlenecks (the “thinner” part of the system that causes the holdup in traffic)
- The breaking point (after what amount of load does the system degrade)
Types of performance testing
There are several types of performance testing (below, you can find a glance explanation for some of them):
1. Load testing: this test is conducted to check the behavior of system under a specific expected load. For example: expected number of users on app performing a specific number of actions/transactions within some set duration. The test will give the response time.
2. Stress testing: this test is used to understand the upper limits of capacity of the system, to check if its robustness when we have extreme load. We check how system behaves when we go above the expected maximum.
3. Soak testing (endurance testing): test done to determine if system can sustain the continuous expected load. We are applying the significant load for an extended period of time where memory utilization is monitored to detect potential leaks. We run this test to ensure that throughput and/or response times after long period of sustained activity are as good or better than at the beginning of the test.
4. Spike testing: in this test we suddenly increase the load by increasing the number of users (very large amount). The goal is to determine whether performance will suffer.
5. Volume testing: used to verify that the performance of the app is not affected by the volume of data that is being handled by app. Huge volume of data is entered into database and we are checking how app is working against the heavy DB.
6. Scalability testing: to determine the application’s effectiveness in “scalling up” to support an increase in user load.
The metrics we measure
There is actually a lot. When I started investigating this kind of tests, I had some things on my mind. I though there is some response time I need to check, some memory usage, hits. Only when I started actually creating tests and digging deeper, I found out there are so many things that we need to check when performance comes on stage. And, I found out that these things are so neglected during development. The basic parameters monitored during performance test include:
Okay, now you know something about performance testing. Believe me, it is just a start, and there are so many interesting stuff you can still learn.
The next thing is to discuss the performance testing process (yes, this kind of testing also has its process, as any other type) and to choose and start using a tool.
In the texts that will follow this one, I will explain you the process mentioned above, what I encountered as difficulties and obstacles (and how I handled them). Also, there will surely be few words about JMeter and test that can be created within this tool.