Load test your web application with Apache JMeter
Stress Level
Find out how your web server performs under fire with Apache's JMeter testing tool.
Administrators and developers panic if a site is strained by the sheer number of visitors – the web shop collapses under the onslaught of customers and only the disk LEDs show signs of life. At those moments, many a thoughtful admin wishes they had taken the time for a stress test.
It is good practice to subject web applications to an extensive load test to avoid unfortunate surprises during production. Only through testing can application developers and responsible webmasters reliably determine which features perform well and which don't.
The Apache Software Foundation offers a very mature application called JMeter [1] as a tool for testing websites. Stefano Mazzocchi, born in Italy and now employed at Google in the US, began to develop JMeter in 1998 in order to complete load tests on the Apache Tomcat server. Mazzocchi, who has been a member of the Apache Jakarta Project Management Committee (PMC) since 1999, then carried on with the tool as a Jakarta sub-project. JMeter, which occupies a niche similar to the Grinder 3 testing tool [2], has been an independent Apache top-level project since 2011.
Several versions of JMeter are released each year. The current version, JMeter 2.13, supports the HTTP, SOAP, FTP, JDBC, MongoDB, LDAP, JMS, AJP, TCP, SMTP, POP3, and IMAP protocols, as well as their encrypted counterparts.
The JMeter documentation specifies a Java Runtime Environment (JRE, at least version 6, but also 8) and appropriate drivers. Pre-configured templates for popular web applications, such as WordPress, are available on the Internet [3], and you can expand JMeter functionality using scripts in different programming languages and plugins [4].
More on JMeter
JMeter is designed to simulate the effect of real web traffic. The traffic appears to the web server as a rush of incoming connections from browsers on the network. JMeter supports many common web protocols, and a helpful GUI makes it easy to configure, organize, and launch new tests. The user has a range of options for displaying output graphically for easy analysis.
Although JMeter might appear as a browser to the web server, the documentation points out that "JMeter is not a browser." According to the project website, "JMeter looks like a browser (or rather, multiple browsers); however, JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the JavaScript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever viewed at a time)." JMeter is an effective testing tool in spite of these limitations, but you'll need to be aware of what it does and doesn't do to interpret the results.
Taking Action with a Test Plan
You can call JMeter using the jmeter.sh
script in the $JMETER_HOME/bin
directory. Look in the same directory for the jmeter.log
logfile, which you should analyze if errors occur.
The procedure for a JMeter test is defined through a test plan. Start with the templates in the bin/templates
or printable_docs/demos
directories and customize the templates as desired. Choose Templates in the JMeter File menu and select Building a Web Test Plan from the available templates. The example template sets two requests for the jmeter.apache.org host and the /
and /changes.html
pages and displays the result as a graph.
The other way to build a test plan is to create one from scratch. Test plans are written in XML format without an XSD schema. You can, however, convert the plan into HTML for documentation via a style sheet:
extras/schematic.cmd <Testplan>.jmx
A recorder supplied with JMeter is the third and most convenient method for creating a test script. First enter the JMeter server proxy address in your web browser with port 8888 and localhost; then, call up the template for the test script recorder and start it. Now record all calls the user completes in the browser. You can manually add the test script recorder element to the icon workbench using Add | Non-Test Elements | HTTP(S) Test Script Recorder. This technique is particularly useful for more complex page visits with registration.
Once the recording is complete, you can add variables to adapt it for different environments and hostnames (Figure 1).
Expanding Test Plans
JMeter creates simulated users in thread groups and gives you the option of defining warm-up or waiting times. The actual queries are called samplers. The simulated users can work with cookies, navigate logins, and fill in forms. Testers should verify the success of the results to distinguish between technical and professional errors.
Logic controllers manage the execution of individual parts of the test plan. Listener elements illustrate the test results as graphs or tables (Figure 2). The tester can specify parameters as customized configuration elements (User Defined Variables) at the beginning of the test plan or give them to JMeter as environment parameters. The great art is in designing the test plan so you can expand and configure it easily [5].
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Latest Cinnamon Desktop Releases with a Bold New Look
Just in time for the holidays, the developer of the Cinnamon desktop has shipped a new release to help spice up your eggnog with new features and a new look.
-
Armbian 24.11 Released with Expanded Hardware Support
If you've been waiting for Armbian to support OrangePi 5 Max and Radxa ROCK 5B+, the wait is over.
-
SUSE Renames Several Products for Better Name Recognition
SUSE has been a very powerful player in the European market, but it knows it must branch out to gain serious traction. Will a name change do the trick?
-
ESET Discovers New Linux Malware
WolfsBane is an all-in-one malware that has hit the Linux operating system and includes a dropper, a launcher, and a backdoor.
-
New Linux Kernel Patch Allows Forcing a CPU Mitigation
Even when CPU mitigations can consume precious CPU cycles, it might not be a bad idea to allow users to enable them, even if your machine isn't vulnerable.
-
Red Hat Enterprise Linux 9.5 Released
Notify your friends, loved ones, and colleagues that the latest version of RHEL is available with plenty of enhancements.
-
Linux Sees Massive Performance Increase from a Single Line of Code
With one line of code, Intel was able to increase the performance of the Linux kernel by 4,000 percent.
-
Fedora KDE Approved as an Official Spin
If you prefer the Plasma desktop environment and the Fedora distribution, you're in luck because there's now an official spin that is listed on the same level as the Fedora Workstation edition.
-
New Steam Client Ups the Ante for Linux
The latest release from Steam has some pretty cool tricks up its sleeve.
-
Gnome OS Transitioning Toward a General-Purpose Distro
If you're looking for the perfectly vanilla take on the Gnome desktop, Gnome OS might be for you.