Simple HTTP Load tester
Project description
Boom! is a simple command line tool to send some load to a web app.
Boom! is a script you can use to quickly smoke-test your web app deployment. If you need a more complex tool, I’d suggest looking at Funkload or Locust.
Boom! was specifically written to replace my Apache Bench usage, to provide a few missing features and fix a few annoyances I had with AB.
I have no special ambitions for this tool, and since I have not found any tool like this in the Python-land, I wrote this one.
There are a lot of other tools out there, like Siege which seems very popular.
However, Boom! is a good choice because it works on any platform and is able to simulate thousands of users by using greenlets.
Installation
Boom! requires Gevent and Requests. If you are under Windows I strongly recommend installing Gevent with the xxx-win32-py2.7.exe installer you will find at: https://github.com/surfly/gevent/downloads
Boom! should work with the latest versions.
If you are under Linux, installing the source version is usually a better idea. You will need libev for Gevent.
Example under Ubuntu:
$ sudo apt-get install libev libev-dev python-dev
Then:
$ pip install boom
Basic usage
Basic usage example: 100 queries with a maximum concurrency of 10 users:
$ boom http://localhost:80 -c 10 -n 100 Server Software: nginx/1.2.2 Running 100 queries - concurrency: 10. Starting the load [===================================] Done -------- Results -------- Successful calls 100 Total time 0.3260 s Average 0.0192 s Fastest 0.0094 s Slowest 0.0285 s Amplitude 0.0191 s RPS 306 BSI Pretty good -------- Legend -------- RPS: Request Per Second BSI: Boom Speed Index
Boom! has more options:
$ boom --help usage: boom [-h] [--version] [-m {GET,POST,DELETE,PUT,HEAD,OPTIONS}] [--content-type CONTENT_TYPE] [-D DATA] [-c CONCURRENCY] [-a AUTH] [--header HEADER] [--pre-hook PRE_HOOK] [--post-hook POST_HOOK] [--json-output] [-n REQUESTS | -d DURATION] [url] Simple HTTP Load runner. positional arguments: url URL to hit optional arguments: -h, --help show this help message and exit --version Displays version and exits. -m {GET,POST,DELETE,PUT,HEAD,OPTIONS}, --method {GET,POST,DELETE,PUT,HEAD,OPTIONS} HTTP Method --content-type CONTENT_TYPE Content-Type -D DATA, --data DATA Data. Prefixed by "py:" to point a python callable. -c CONCURRENCY, --concurrency CONCURRENCY Concurrency -a AUTH, --auth AUTH Basic authentication user:password --header HEADER Custom header. name:value --pre-hook PRE_HOOK Python module path (eg: mymodule.pre_hook) to a callable which will be executed before doing a request for example: pre_hook(method, url, options). It must return a tupple of parameters given in function definition --post-hook POST_HOOK Python module path (eg: mymodule.post_hook) to a callable which will be executed after a request is done for example: eg. post_hook(response). It must return a given response parameter or raise an `boom.boom.RequestException` for failed request. --json-output Prints the results in JSON instead of the default format -n REQUESTS, --requests REQUESTS Number of requests -d DURATION, --duration DURATION Duration in seconds
Design
Boom uses greenlets through Gevent to create virtual users, and uses Requests to do the queries.
Using greenlets allows Boom to spawn large amounts of virtual users with very little resources. It’s not a problem to spawn 1000 users and hammer a web application with them.
If you are interested in this project, you are welcome to join the fun at https://github.com/tarekziade/boom
Make sure to add yourself to the contributors list if your PR gets merged. And make sure it’s in alphabetical order!
History
1.0 - 2016-09-05
Update .gitignore for pycharm users
Alphabetize contributors list for simplicity (read OCD)
Replace BSI response of Hahahaha with sadface
Add Travis CI
Add Coveralls
Update tox to test for 2.7 and 3.5 locally (travis ci handles the rest)
0.9 - 2016-08-28
python 3 support
removal of python 2.6 support
fix unittest2 dep
Added –validator option for validating request response data
Change –hook to –pre-hook
added new option –post-hook for validating request response data
fixed the error handling of failed DNS resolution
Replace urlparse.urlparse with urllib3’s parse_url
0.8 - 2013-07-14
Nicer progress bar
Added the –json-output option
Integrated Tox
Make sure the DNS resolution works with gevent 0.x and 1.x
Improved tests
Removed the globals
0.7 - 2013-05-21
fixed the TypeError on empty stats - #19
catch the dns error and display it nicely
added SSL support - #17
added clean error display - #16
No notes on earlier releases.
Owner
Tarek Ziade
Contributors
Chris Adams
Rikard Anglerud
Lukasz Balcerzak
Ralph Bean
Andrea Crotti
Adolfo Fitoria
Tomas Hanacek
Hanley Hansen
Marcin Kuzminski
Jack Pearkes
Wang Zhen Pu
Venelin Stoykov
Martin Voldrich
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.