Features of The Grinder 3

Thanks to Edwin DeSouza for his help in compiling this feature list.
Last updated: 4 October 2011

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.

Open Source

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 Test scripts can directly access any Java API.
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 Plug-in

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

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.