The Grinder, a Java Load Testing Framework
What is The Grinder?
The Grinder is a JavaTM load testing framework that makes it easy to run a distributed test using many load injector machines. It is freely available under a BSD-style open-source license.
The latest news, downloads, and mailing list archives can be found on SourceForge.net.
- Generic Approach Load test anything that has a Java API. This includes common cases such as HTTP web servers, SOAP and REST web services, and application servers (CORBA, RMI, JMS, EJBs), as well as custom protocols.
- Flexible Scripting Tests are written in the powerful Jython scripting language.
- Distributed Framework A graphical console allows multiple load injectors to be monitored and controlled, and provides centralised script editing and distribution.
- Mature HTTP Support Automatic management of client connections and cookies. SSL. Proxy aware. Connection throttling. Sophisticated record and replay of the interaction between a browser and a web site.
See the longer features list for further details.
The Grinder was originally developed for the book Professional Java 2 Enterprise Edition with BEA WebLogic Serverby Paco Gómez and Peter Zadrozny. Philip Aston took ownership of the code, reworked it to create The Grinder 2, and shortly after began work on The Grinder 3. The Grinder 3 provides many new features, the most significant of which is Jython scripting. Philip continues to enhance and maintain The Grinder.
In 2003, Peter, Philip and Ted Osborne published the book J2EE Performance Testing which makes extensive use of The Grinder 2.
Capabilities of The Grinder
|Load Testing||Load Testing determines if an application can support a specified load (for example, 500 concurrent users) with specified response times. Load Testing is used to create benchmarks.|
|Capacity Testing||Capacity Testing determines the maximum load that an application can sustain before system failure.|
|Functional Testing||Functional Testing proves the correct behaviour of an application.|
|Stress Testing||Stress Testing is load testing over an extended period of time. Stress Testing determines if an application can meet specified goals for stability and reliability, under a specified load, for a specified time period.|
|BSD style license||The Grinder is distributed under a BSD style license.|
|Dependencies||The Grinder depends on a number of other open source products including|
|100% Pure Java||The Grinder works on any hardware platform and any operating system that supports J2SE 1.4 and above.|
|Web Browsers||The Grinder can simulate web browsers and other devices that use HTTP, and HTTPS.|
|Web Services||The Grinder can be used to test Web Service interfaces using protocols such as SOAP and XML-RPC.|
|Database||The Grinder can be used to test databases using JDBC.|
|Middleware||The Grinder can be used to test RPC and MOM based systems using protocols such as IIOP, RMI/IIOP, RMI/JRMP, and JMS.|
|Other Internet protocols||The Grinder can be used to test systems that utilise other protocols such as POP3, SMTP, FTP, and LDAP.|
The Grinder Architecture
|Goal||Minimize system resource requirements while maximizing the number of test contexts ("virtual users").|
|Multi-threaded, multi-process||Each test context runs in its own thread. The threads can be split over many processes depending on the requirements of the test and the capabilities of the load injection machine.|
|Distributed||The Grinder makes it easy to coordinate and monitor the activity of processes across a network of many load injection machines from a central console.|
|Scalable||The Grinder typically can support several hundred HTTP test contexts per load injection machine. (The number varies depending on the type of test client). More load injection machines can be added to generate bigger loads.|
|Graphical Interface||100% Java Swing user interface.|
|Process coordination||Worker processes can be started, stopped and reset from one central console.|
|Process monitoring||Dynamic display of current worker processes and threads.|
|Internationalised and Localised||English, French, Spanish, and German translations are supplied. Users can add their own translations.|
|Script editing||Central editing and management of test scripts.|
Statistics, Reports, Charts
|Test monitoring||Pre-defined charts for response time, test throughput. Display the number of invocations, test result (pass/fail), average, minimum and maximum values for response time and tests per second for each test.|
|Data collation||Collates data from worker processes. Data can be saved for import into a spreadsheet or other analysis tool.|
|Instrument anything||The Grinder records statistics about the number of times each test has been called and the response times achieved. Any part of the test script can be marked as a test.|
|Statistics engine||Scripts can declare their own statistics and report against them. The values will appear in the console and the data logs. Composite statistics can be specified as expressions involving other statistics.|
|Record real users||Scripts can be created by recording actions of a real user using the TCP Proxy. The script can then be customised by hand.|
|Powerful scripting in Python||Simple to use but powerful, fully object-oriented scripting.|
|Multiple scenarios||Arbitrary looping and branching allows the simulation of multiple scenarios. Simple scenarios can be composed into more complex scenarios. For example, you might allocate 10% of test contexts to a login scenario, 70% to searching, 10% to browsing, and 10% to buying; or you might have different workloads for specific times of a day.|
|Access to any Java API||Jython allows any Java-based API to be used directly from the test script.|
|Parameterization of input data||Input data (e.g. URL parameters, form fields) can be dynamically generated. The source of the data can be anything including flat files, random generation, a database, or previously captured output.|
|Content Verification||Scripts have full access to test results. In the future, The Grinder will include support for enhanced parsing of common results such as HTML pages.|
The Grinder Plug-ins
|HTTP||The Grinder has special support for HTTP that automatically handles cookie and connection management for test contexts.|
|Custom||Users can write their own plug-ins to a documented interface; although this is rarely necessary due to the powerful scripting facilities.|
|HTTP 1.0, HTTP 1.1||Support for both HTTP 1.0 and HTTP 1.1 is provided.|
|HTTPS||The Grinder supports HTTP over SSL.|
|Cookies||Full support for Cookies is provided.|
|Multi-part forms||The Grinder supports multi-part forms.|
|Connection throttling||Low bandwidth client connections can be simulated.|
|TCP proxy||A TCP proxy utility is supplied that can be used to intercept system interaction at the protocol level. It is useful for recording scripts and as a debugging tool.|
|HTTP Proxy||The TCP proxy can be configured as an HTTP/HTTPS proxy for easy integration with web browsers.|
|SSL Support||The TCP proxy can simulate SSL sessions.|
|Filter-based architecture||The TCP proxy has a pluggable filter architecture. Users can write their own filters.|
|Commercial books||Professional Java 2 Enterprise Edition with BEA WebLogic Server|