Apache JMeter is one of the best tools used to perform stress testing. It is an open source project that runs simulated, virtual users that make all of the requests that a real browser would make. Technically speaking, it is an application written in Java, meaning it can run on any machine, Windows, Linux or Mac. It is GUI based, so elements can be added via the GUI tool, such as http requests.
One of the best things about JMeter is that because it is an open source project, it supports a plug-in architecture where functionalities can easily be added by writing a Java plug-in.
One of the areas where JMeter differs from some of the other commercial performance testing tools is in its focus on defining load in terms of concurrent users, opposed to defining load in terms of requests per second. For that matter, API performance testing is usually done based on requests per second, which resulted in the creation of a third party plug-in to support detailed throughput shaping based on transactions/requests per second.
Features of JMeter
Apache JMeter features include:
- Ability to load and performance test many different applications/server/protocol types:
- Web – HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
- SOAP / REST Webservices
- Database via JDBC
- Message-oriented middleware (MOM) via JMS
- Mail – SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- Java Objects
- Full featured Test IDE that allows fast Test Plan recording (from Browsers or native applications), building and debugging.
- CLI mode (Command-line mode (previously called Non GUI) / headless mode) to load test from any Java compatible OS (Linux, Windows, Mac )
- A complete and ready to present dynamic HTML report
- Easy correlation through ability to extract data from most popular response formats, HTML, JSON , XML or any textual format
- Complete portability and 100% Java purity.
- Full multi-threading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups.
- Caching and offline analysis/replaying of test results.
- Highly Extensible core:
- Pluggable Samplers allow unlimited testing capabilities.
- Scriptable Samplers (JSR223-compatible languages like Groovy and BeanShell)
- Several load statistics may be chosen with pluggable timers.
- Data analysis and visualization plugins allow great extensibility as well as personalization.
- Functions can be used to provide dynamic input to a test or provide data manipulation.
- Easy Continuous Integration through 3rd party Open Source libraries for Maven, Gradle and Jenkins.
The JMeter Challenge
Like many open source, developer-oriented platforms, the real challenge with JMeter is that it was written with a focus on technical functionality and not on user experience. For example, in JMeter, a virtual user is called a ‘thread’, whereas other tools use the terms ‘virtual user’, ‘simulated user’, or even simply, ‘user’. JMeter also makes use of the term ‘sampler’, which other tools refer to as a ‘request’.
While the community has added a significant amount of functionality, ultimately, JMeter lacks a number of features and capabilities that are required for enterprise usage. There are a lot of missing components in terms of scaling, server coordination, collaboration and access levels.
Conversely, JMeter is ideal for a single developer that needs to run load tests for a couple of hundred or even a thousand concurrent users on a website which makes JMeter (on it’s own) a great solution for small development shops. However, once a solution is needed for a distributed team or enterprise, where things like true scalability, ease of use, teamwork, commercial support and reporting capabilities are vital to the company’s performance and survival, JMeter, alone, does not suffice.
While JMeter, on its own, is definitely a viable alternative for some scenarios, mostly when dealing with smaller loads and teams, once you are looking for a solution which is truly suited for large teams and/or large loads, and/or automated performance testing, BlazeMeter gives you the best of both worlds. It is an open source solution with commercial support and an impressive feature set. BlazeMeter provides high-end enterprise-grade load testing at an affordable price.