Skip to main content

Why Performance Test on Cloud


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`.  


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.



Popular posts for software testing and automation

Selenium Error "Element is not currently interactable and may not be manipulated"

Selenium webdriver can drive different browsers like as Firefox, Chrome or Internet Explorer. These browsers actually cover the majority of internet users, so testing these browsers possibly covers the 90% of the internet users. However, there is no guaranty that the same automation scripts can work without a failure on these three browsers. For this reason, automation code should be error-prone for the browsers you want to cover. The following error is caught when the test script run for Chrome and Internet Explorer, but surprisingly there is no error for the Firefox. Selenium gives an error like below: Traceback (most recent call last):   File "D:\workspace\sample_project\sample_run.py", line 10, in <module>     m.login()   File "D:\workspace\ sample_project \test_case_imps.py", line 335, in login     driver.find_element_by_id("id_username").clear()   File "C:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriver\r

Change Default Timeout and Wait Time of Capybara

One of the biggest challenge for automation is handling timeout problem. Most of the time, timeout is 60 seconds but it may sometimes not enough if you have badly designed asynchronous calls or the third party ajax calls. This makes handling timeout more complex. set large enough to tolerate network related problems. For Selenium based automation frameworks, like Capybara, default Webdriver timeout is set to Net::ReadTimeout (Net::ReadTimeout) Changing ReadTimeout If you have timeout problem for Capybara, it gives an error like above. This means that the page is not fully loaded in given timeout period. Even you can see that page is loaded correctly but webdriver wait until the Ajax calls finish. class BufferedIO #:nodoc: internal use only def initialize (io) @io = io @read_timeout = 60 @continue_timeout = nil @debug_output = nil @rbuf = '' end . . . . . def rbuf_fill beg

Create an Alias for Interactive Console Work: Selenium and Capybara

If you are working on shell most of the time Aliases are very helpfull and time saving. For testing purposes you can use Alias for getting ready your test suites. In this post, I want to explain both running Selenium and Capybara on console and creating aliases for each.  This post is for Windows machines, if you are using Unix-like see   this post . Creating Scripts for Selenium and Capybara First of all, it is assumed that you have installed Selenium and Capybara correctly and they work on your machines. If you haven't installed, you can see my previous posts. I am using the Selenium with Python and the Capybara with Ruby. You can use several different language for Selenium but Capybara works only with Ruby.  Create scripts in a directory called scripts (in your home folder, like as  ~/scripts ) for your automation tool as following, save them as capybara.rb, sel.py :  Creating Aliases Depends on your favourite shell, you need to add the alias to .bashrc bash

Page-Object Pattern for Selenium Test Automation with Python

Page-object model is a pattern that you can apply it to develop efficient automation framework. With the page-model, it is possible to minimize maintenance cost. Basically page-object means that your every page is inherited from a base class which includes basic functionalities for every page. If you have some new functionalities that every page should have, you can simple add it to the base class. Base class is like the following: In this part we are creating pages which are inherited from base page. Every page has its own functionalities written as python functions. Some functions return to a new page, it means that these functions leave the current page and produce a new page. You should write as much as functions you need in the assertion part because this is the only part you can use the webdriver functions to interact with web pages . This part can be evaluate as providing data to assertion part.   The last part is related to asserting your test cases against to the

Performance Testing on CI: Locust is running on Jenkins

For a successful Continuous Integration pipeline, there should be jobs for testing the performance of the application. It is necessary if the application is still performing well. Generally performance testing is thought as kinds of activities performed one step before going to live. In general approach it is true but don't forget to test your application's performance as soon as there is an testable software, such as an api end point, functions, and etc. For CI it is a good approach to testing performance after functional testing and just before the deployment of next stage. In this post, I want to share some info about Jenkins and Locust. In my previous post you can find some information about Locust and Jenkins. Jenkins operates the CI environment and Locust is a tool for performance testing. To run the Locust on Jenkins you need command line arguments which control the number of clients ,   hatch rate,  running locust without web interface and there should be so