Basher is a profiling and performance test framework for Java POJOs. The intention of Basher is to provide both developers and testers with a utility that would allow them to quickly and easily thread test, profile and measure performance of their code under various, pre-defined scenarios.
By moving the action closer to the code, Basher attempts to help in increasing productivity by integrating into the normal build cycle of a project as a Maven plugin.
As such, Basher is not meant as a replacement for tools such as Grinder, JMeter and many other excellent performance testing tools available. Instead, it should be considered as a complement to them, to be used during the development cycle to catch early thread & performance issues
By stringing together a number of small operations (tasks), you can build a powerful simulation of the intended runtime environment:
- Many writes, few reads: When using a database service (maybe based on Hibernate), you might want to simulate how the system behaves while there are many transactions being written to the database. By constructing a task (set of tasks) that perform the required write operation, Basher will simulate a scenario which is heavy on writes. By then adding a task which does a read of some data, it offers the chance to time how long read operations would take under heavy [write] load.
- Many of one: If there is a need to test how long a single operation takes, a task could be written that emulates it and is then executed by Basher in a heavy load scenario.
- Few tasks, followed by others: To test a set of operations, that could optionally be followed by some other operation, Basher offers the functionality to specify an operation that can have followers. For example, creating an account could be followed by a login call and a listing of the current choices made by the account holder.
There is bound to be other uses of Basher, but the following should give an idea as to what current uses you can find for Basher:
- Performance Testing: Use it to build up performance testing scenarios and get relevant performance figures for your code (and only your code).
- Profiling: Use it to build up a profiling scenario that is reproducible. Plug in the profiler of your choice and pinpoint your bottle-necks.
- Thread Testing: Put your code under heavy load in a light-weight threaded environment. Concise and quick reporting of errors thrown from your application.
- Continuous Performance Measuring: Use the Basher to build up a reproducible set of performance measuring tasks that can be run at any time. Then use the log file processing facilities of Basher to produce a daily report of your performance. This will allow you to quickly find out how any changes made has impacted performance.
All these usages are exercisable through the Maven Basher plugin