Load testing is a type of non-functional software testing which is conducted to understand the behaviour of any application under a specific expected load. Both normal and peak conditions are simulated for the test. Load tests help in finding out the maximum operating capacity of an application. The primary goal of load testing is to determine the maximum amount of work a system can handle without breaking down. It also helps in determining the bottlenecks in the processes and helps identify the elements that cause friction, the delay and the breakdown. In load testing, load is systematically increased to extreme conditions. The idea is to find out how much load the application can handle before it crashes. It also enables you to find out the point when you should consider reconfiguring the network, when to add a new server etc.
Let’s discuss a few tools that can help you with load testing.
Apache JMeter is a popular cross-platform, pure Java open source desktop application designed to load test functional behaviour and performance. All basic protocols such as JDBC, SOAP, LDAP, JMS and FTP are supported by JMeter. JMeter was originally designed for testing Web Applications or FTP applications. Now it is used to test other functions like database server performance, load testing, distribution testing and functional testing too. It is used both on static and dynamic resources like Data Bases, Queries, Perl Scripts, Servlets, FTP servers and more. You don’t need to know much coding to do interesting things on JMeter via the friendly JMeter GUI.
It can thus load and performance test various server/protocols including Http/Https, SOAP/RESTful, FTP, Mail, POSTs, Webservices, MongoDB, DB via JDBC, Native commands/shell scripts and TCP. It is easily scalable. If you want a higher load than what a single machine can create, you can go for JMeter’s distributed mode where one master JMeter machine controls a number of remote hosts and the load is multiplied. It has multiple built-in and external listeners that visualize and analyze performance test results and provide you with a variety of reports. It supports variable parameterization, assertions- response validations, per thread cookies and configuration variables. JMeter’s architecture is based on plug-ins. Offsite developers can extend JMeter with plug-ins.
Gatling is an open-source, cross-platform load testing framework based on Scala, Akka and Netty. It supports OSX, Linux and Windows and has a developer friendly DSL. It officially supports HTTP, WebSockets, Server- sent events and JMS. It is extensible through plug-ins, like the maven-plug-in, the Jenkins-plug-in and the gradle-plugin. It fully supports HTTP(S) protocols and can be used for JDBC and JMS load testing.
It provides you with a scenario recorder which allows you to record your actions on the web applications you want to test. You can then export that recorded scenario as Gatling scenario. Gatling uses both asynchronous concurrency and asynchronous IOs and hence it scales better. Asynchronous concurrency with Actor model allows Gatling engine to be more efficient and it drastically reduces the number of threads needed to run a lot of users. For example, it can run 2000 users in 50 threads. Actors are composed of a mailbox which receives and stores all the messages and a computation unit that executes a predefined action for each message received. Multiple scenarios can be run in one simulation.
It helps the testers save time and resources. Gatling has a basic GUI limited to test recorder. The tests can be developed in easily readable/writable domain-specific language. It provides ready-to-present HTML reports.
# The Grinder
Grinder is an open-source Java based load tester which is distributed under a BSD style licensing. With the help of Grinder you can test anything that has a Java API. It supports multiple protocols. You can test HTTP web servers, SOAP and REST services, and application servers like JMS, RMI, CORBA and EJBs. Tests are run through dynamic scripts using load injector machines. Dynamic requests, Java, Jython or Clojure code combined with any Java API, can be tested through scripts. It allows for arbitrary branching and looping. Test results are directly available to test script and depending on the outcome of each test different test paths can be taken. The default scripting language is Jython, the Java version of Python. Grinder is easily extendible. It provides for centralised script editing and distribution. Scripts can also be created by recording actions of a real user using the TCP Proxy. The TCP proxy has pluggable filter architecture. Users can write their own filters.
The Grinder consists of a Console and Grinder Agents. The console which is a GUI application, controls Grinder agents and monitors results in real time. It can be used as a basic IDE (Interactive Development Environment) for editing and developing test suites. Worker processes can be started, stopped and reset from one central console. Grinder Agents are the load generators. Grinder console can monitor and control multiple load injectors. Grinder enables distributed testing which scales with the increase in the number of agent instances. It provides for flexible parameterization, which can help you create test data on the fly. You can also integrate external data sources like files and databases. Grinder provides mature HTTP support that automatically handles cookie and connection management for test contexts.
CloudTest is a scalable cloud -based testing service for load and performance tests. It was released by SOASTA in 2008. It is a single integrated platform designed for modern web and mobile applications testing. Its architecture is based on highly scalable and reliable infrastructure. Multiple load generators are spread across the world to simulate real world usage scenario. Test applications that leverage CDNs can be tested properly. CloudTest enables rapid creation and editing of even the most complex tests you want to put your applications through. Scalability is easy. You can get thousands to millions of users generating traffic on your site or app.
The platform can be used as a virtual testing lab very cost effectively. This testing service has a sophisticated GUI and real-time analytics. Applications can be tested globally from 95 locations and CloudTest users can choose from 40 cloud service providers to simulate accurate user traffic. Its grid deployment feature allows users to easily deploy servers at all the major cloud providers and be able to choose the number, size and location of servers. The process is easy. Define testing needs and testing windows, create the environment with required number of load generators and start testing. CloudTest provides services like Test Cloud Management, Real time Analytics, Global Test cloud and Core Testing Services. CloudTest runs on Windows, Linux and Mac OS.
WebLOAD generates Virtual Clients that simulate real-world loads. Virtual Clients in load generating console are able to generate massive virtual user load – locally on Windows or Linux and on the cloud via AWS or other cloud providers.
These are some of the load testing tools you can use. You can experiment with tools like LOADrunner, Blazemeter, LoadUI, WAPT, Httperf, Tsung, Appvance, OpenSTA, NeoLoad and other tools too.
Load testing ensures that the application is able to handle expected and unexpected user loads. Simulation of user activity and monitoring of your infrastructure gives you plenty of insights on how to avoid bottlenecks.
Find out your specific requirements and then research, test, experiment and monitor till you find the tool that fits your requirement.