Software load testing explained

The term load testing[1] or stress testing is used in different ways in the professional software testing community. Load testing generally refers to the practice of modeling the expected usage of a software program by simulating multiple users accessing the program concurrently.[2] As such, this testing is most relevant for multi-user systems; often one built using a client/server model, such as web servers. However, other types of software systems can also be load tested. For example, a word processor or graphics editor can be forced to read an extremely large document; or a financial package can be forced to generate a report based on several years' worth of data. The most accurate load testing simulates actual use, as opposed to testing using theoretical or analytical modeling.

Load testing lets you measure your website's quality of service (QOS) performance based on actual customer behavior. Nearly all the load testing tools and frameworks follow the classical load testing paradigm: when customers visit your website, a script recorder records the communication and then creates related interaction scripts. A load generator tries to replay the recorded scripts, which could possibly be modified with different test parameters before replay. In the replay procedure, both the hardware and software statistics will be monitored and collected by the conductor, these statistics include the CPU, memory, disk IO of the physical servers and the response time, the throughput of the system under test (SUT), etc. And at last, all these statistics will be analyzed and a load testing report will be generated.

Load and performance testing analyzes software intended for a multi-user audience by subjecting the software to different numbers of virtual and live users while monitoring performance measurements under these different loads. Load and performance testing is usually conducted in a test environment identical to the production environment before the software system is permitted to go live.

Objectives of load testing: - To ensure that the system meets performance benchmarks;- To determine the breaking point of the system;- To test the way the product reacts to load-induced downtimes.

As an example, a website with shopping cart capability is required to support 100 concurrent users broken out into the following activities:

A test analyst can use various load testing tools to create these VUsers and their activities. Once the test has started and reached a steady-state, the application is being tested at the 100 VUser loads as described above. The application's performance can then be monitored and captured.

The specifics of a load test plan or script will generally vary across organizations. For example, in the bulleted list above, the first item could represent 25 VUsers browsing unique items, random items, or a selected set of items depending upon the test plan or script developed. However, all load test plans attempt to simulate system performance across a range of anticipated peak workflows and volumes. The criteria for passing or failing a load test (pass/fail criteria) are generally different across organizations as well. There are no standards specifying acceptable load testing performance metrics.

A common misconception is that load testing software provides record and playback capabilities like regression testing tools. Load testing tools analyze the entire OSI protocol stack whereas most regression testing tools focus on GUI performance. For example, a regression testing tool will record and playback a mouse click on a button on a web browser, but a load testing tool will send out hypertext the web browser sends after the user clicks the button. In a multiple-user environment, load testing tools can send out hypertext for multiple users with each user having a unique login ID, password, etc.

The popular load testing tools available also provide insight into the causes for slow performance. There are numerous possible causes for slow system performance, including, but not limited to, the following:

Load testing is especially important if the application, system, or service will be subject to a service level agreement or SLA.

Load testing is performed to determine a system's behavior under both normal and anticipated peak load conditions. It helps to identify the maximum operating capacity of an application as well as any bottlenecks and determine which element is causing degradation. When the load placed on the system is raised beyond normal usage patterns to test the system's response at unusually high or peak loads, it is known as stress testing. The load is usually so great that error conditions are the expected result, but there is no clear boundary when an activity ceases to be a load test and becomes a stress test.

The term "load testing" is often used synonymously with concurrency testing, software performance testing, reliability testing, and volume testing for specific scenarios. All of these are types of non-functional testing that are not part of functionality testing used to validate suitability for use of any given software.

User experience under load test

In the example above, while the device under test (DUT) is under production load - 100 VUsers, run the target application. The performance of the target application here would be the User Experience Under Load. It describes how fast or slow the DUT responds, and how satisfied or how the user actually perceives performance.

Browser-level vs. protocol-level users

Historically, all load testing was performed with automated API tests that simulated traffic through concurrent interactions at the protocol layer (often called protocol level users or PLUs). With the advance of containers and cloud infrastructure, the option is now present to test with real browsers (often called browser level users or BLUs).[3] Each approach has its merits for different types of applications, but generally, browser-level users will be more akin to the real traffic that a website will experience and provide a more realistic load profile and response time measurement.[4] BLUs are certainly a more expensive way of running tests and cannot work with all types of applications, specifically those that are not accessible through a web browser like a desktop client or API-based application.[5]

Load testing tools

Tool nameCompany nameLicenseTypePricingFocusNotes
Apache JMeterApache Software FoundationApache License 2.0LocalFreeJava desktop application for load testing and performance measurement.
BlazeMeterPerforce Software, IncCloud-basedFree version, demo, paid plan, contact for pricingWebsite, web app, mobile, database, and other scenariosScalable load up to 200,000 concurrent simulated browser users from across eight geographical locations. Can also be used for integration and functional testing.
Blitz (discontinued in 2018)Spirent CommunicationsCloud-basedTrial availableWebsites, mobile, and REST APIsIt allows to simulate of up to 50,000 simultaneous virtual users from different worldwide locations.
FloodTricentis APAC Pty LtdCloud-basedFree plan, paid plan, contact for pricingBrowser based load testing, APIs and protocol driven applicationsScalable load up to millions of concurrent users from all geographic regions available on AWS and Azure, plus on-premise deployments. Pricing is based on Virtual User Hours consumed each month.[6] [7]
GatlingGatling CorpApache License 2.0Local, cloud-basedFree version, demo, paid plan, contact for pricingJava web applicationsPortable HTML reports.
HammerDBGPLv3LocalFreeDatabasesDatabase load testing and benchmarking tool.
Loader.ioSendGrid, IncCloud-basedFree plan, paid plan, contact for pricingWeb applications and API
LoadRunnerMicro FocusLocal, Cloud-basedFree community edition; other: demo, free trial, contact for pricingPrimarily used for executing large numbers of tests (or a large number of virtual users) concurrently. Can be used for unit and integration testing as well.
LoadUI (integrated now in ReadyAPI)SmartBear SoftwareEUPLLocalDemo availableCross-platform load testing tool, targeted mainly at web services. Integrates with soapUI.
LocustOpen sourceMIT LicenseLocal, cloud-basedFreePython based framework with load tests expressed in regular code
Login VSILogin VSI, Inc.LocalDemo, contact for pricingVirtual windows desktops workloads
NeoLoadNeotysLocal, cloud-basedFree trial, demo, contact for pricingWeb and mobileLoad can be generated from local agents or from the cloud.
OpenSTACYRANOGNU General Public License 2.0LocalFreeWeb serverUtilizes a distributed software architecture based on CORBA. OpenSTA binaries available for Windows.
Parasoft SOAtestParasoftLocal, cloud-basedDemo, contact for pricingPerformance testing tool that verifies functionality and performance under load. Supports SOAtest tests, JUnits, lightweight socket-based components. Detects concurrency issues.
Rational Performance TesterIBMLocal, cloud-basedContact for pricingEclipse-based large-scale performance testing tool primarily used for executing large volume performance tests to measure system response time for server-based applications.
SiegeOpen source GPLv3 or laterLocalFreeWeb serversSupports basic authentication, cookies, HTTP, HTTPS and FTP protocols.
Silk PerformerMicro FocusLocal, cloud-basedFree trial, contact for pricingApplication performance tool with cloud and local virtual agents. Supports most protocols and applications. Licensed.
SoapUISmartBear SoftwareEUPL Version 1.1LocalFree
Test StudioProgress TelerikLocalFree trial, demo, paid planAssess how the website would perform if visited by a large number of users at the same time.
TsungOpen SourceGPL-2.0LocalFreeWeb servers, Databases, XMPPIt can be used to stress HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, MQTT and Jabber/XMPP servers.
Visual Studio Enterprise edition (deprecated after Visual Studio 2019)MicrosoftLocalPaid planVisual Studio Enterprise edition includes a load test tool that enables a developer to execute a variety of tests (web, unit, etc...) with a combination of configurations to simulate real user load.[8] Microsoft announced that its web performance and load test functionality was deprecated after Visual Studio 2019.
VegetaMIT LicenseLocalFreeHTTP applications
WebLOADRadView Software LtdLocal, cloud-basedFree trial, demo, contact for pricingWeb and Mobile applications and APILoad testing tool for web and mobile applications including Web Dashboard for performance test analysis. Used for large-scale loads which can be generated also from the cloud. Licensed.

Notes and References

  1. Jiang . Zhen Ming . Hassan . Ahmed E. . A Survey on Load Testing of Large-Scale Software Systems . IEEE Transactions on Software Engineering . 41 . 11 . 1091–1118 . 2015 . IEEE .
  2. Book: Wescott, Bob . The Every Computer Performance Book, Chapter 6: Load Testing . . 2013 . 978-1482657753.
  3. News: The future of load testing is BLU. Platz. Wolfgang. InfoWorld. 2018-11-23.
  4. News: We're All Load Testers Now (Maybe) - DevOps.com. 2018-02-08. DevOps.com. 2018-11-23.
  5. Web site: How to Perform Load Testing With Real Browsers Using Flood Element?. geekflare.com. 2018-11-23. 2018-11-17.
  6. Book: Erinle, Bayo. JMeter Cookbook. 2014. Packt Publishing.. 978-1783988280.
  7. Book: Erinle, Bayo. Performance Testing with JMeter. 2015. Packt Publishing. 978-1784394813.
  8. Web site: Load Testing ASP.NET Applications with Visual Studio 2010 . Eggheadcafe.com . 2013-01-13.