When a software comes to production the weakest points are mostly related to performance of the application. The reason is that most of the organization test the application functionally by testers and on acceptance testing period again the applications is under testing to check functional requirements. The missing point is non-functional testing like performance of the application.
Another failure point is testing the performance as the last level of development process. This means that any misleading failures in the service level can cause a very big problem on production stage so it requires extra source if possible and extra budget. As the terminology says "finding the big issue earlier stage of the development can reduce the fixing effort exponentially". Therefore test the performance of the software output whenever it is ready, this could be an api end point, a function servers data to system, a web servers, and etc.
Another failure is related to technology, tools and knowledge. Even you test the performance of the application, if it is not reflecting the real users with real behaviours, the result may cause a wrong conclusion and finally real user test your application performance on production. To achieve the behaviour of real user you must analyze your statistics and I suggest you test performance of the application on cloud.
In this post I want to share my experience about `performance testing on cloud`.
There is also the limit of LAN for sending and receiving the request which if exceeds you test summary tends to become divergence from the reality.
Scalability
Simulating huge amount of concurrent user deepens on the limit of threads or processes. How your performance tools consume your computer, it can be thread as in Jmeter; or thread or process as in LoadRunner depends on your choice; or better approach is to use co-routine as in Locust, there is limit, check this for more information. The limit is not more than 5000 concurrent users for a very good personal computer (as I have experienced, sure it could be higher next year). Therefore have a 100K or 500K users with sending a good amount of request per second and managing the source is not an easy job. But working as master with slaves and adding demanded number of slaves to system on-the-fly is a general feature of cloud computing.Global Scaling
With the scalability, think that your slaves are anywhere in the world and waiting to join your test army. Yeap it sounds good, why you think that your users are only from you location. Without cloud, even you have good amount of user, you can not make them global.Testing in live environment
Real statistics, real user, real user's environment, servers, etc. The key point is to be as much as similar to product on live.Cost of per Request (CopR)
Arranging the budget of the test, pay only for what you have used. Don't buy something for performance testing, instead rent them for short period of time. Performance testing (mostly stress test) is generally done when you have something new as architectural or database level. This means you don't need to perform these tests after deployment of new component, or you don't need to use them frequently so buying the hardware and paying licences are not a cost effective approach, instead rent them.Realistic Load
The key point of the performance testing is to get realistic result and to estimate the risk of failure in the live environment by minimizing it. To have it done, you must run the tests over a real world not a system behind a firewall in a development environment and within a internal network. Also there are the third party integration tools and services interact with your system. The better one is always to test your application with ever thing is real or very close to reality.There is also the limit of LAN for sending and receiving the request which if exceeds you test summary tends to become divergence from the reality.
Managing Test
Cloud services provides some interfaces to manage load testing so every people who are responsible of the test, system, code, and etc. can monitor the result and if any failure occurs they can also handle it.Managing Test Environment
When talking about testing on a single machine it is easy to install required tools and to prepare required script but having a hundred machines and doing these things one by one is not that easy. Cloud computing has some managing tools that when you create a master, by cloning it you can create lots of slaves with test ready state. You can see some cloud computing in the market and their features below taken from a slide of Intechnica.