hummingbird - no bullshit HTTP load testing suite
hstress generates large HTTP workloads.
Options are as follows:
hstress [-c CONCURRENCY] [-b BUCKETS] [-n COUNT] [-p NUMPROCS] [-r RPC] [-i INTERVAL] [HOST] [PORT]
The default host is 127.0.0.1, and the default port is 80.
-
-ccontrols concurrency. This is the number of outstanding requests at a given time -
-bsets the "bucket spec". This determines how we bucket the measurement histograms. Set to a comma-separated list of values in milliseconds. For example1,10,100,250,500will bucket requests into the given amount of milliseconds. -
-ncontrols the total number of requests to make. Left unspecified,hbnever terminates. -
-rspecifies the number of requests per connection (default is no limit) -
-pcontrols the number of processes to fork (for multiple event loops). The default value is1. -
-ispecifies the reporting interval in seconds
hb produces output like the following:
$ hb -n100000 -c20 localhost 8080
# params: c=20 p=1 n=100000 r=-1
# ts errors timeout closes <1 <10 <100 >=100 hz
1310334247 0 0 220 22393 93 0 0 22351
1310334248 0 0 220 22637 30 0 0 22689
1310334249 0 0 226 22566 37 0 0 22625
1310334250 0 0 230 22439 51 0 0 22490
1310334250 0 0 115 9752 21 0 0 22727
# total 100019
# errors 0
# timeouts 0
# closes 1011
# <1 99787
# <10 232
# <100 0
# >=100 0
# hz 22542
The first column is the timestamp, and the subsequent columns are
according to the specified bucketing (controlled via -b). This
output format is handy for analysis with the standard Unix tools. The
banner is written to stderr, so only the data values are emitted to
stdout.
hplay replays http requests at a constant rate. E.g.
# hplay localhost 8000 100 httpreqs
will replay the HTTP requests stored in httpreqs to localhost:8000 at a rate of 100 per second. Request parsing is robust so you can give it packet dumps.
For example, on a server host that receives requests you wish to replay:
$ tcpdump -n -c500 -i any dst port 10100 -s0 -w capture
Then reconstruct it with tcpflow:
$ tcpflow -r capture -c | sed 's/^...\....\....\....\......\-...\....\....\....\......: //g' > reqs
And finally, replay these requests onto localhost:8000:
$ hplay localhost 8000 100 reqs
hserve is a simple HTTP server that will yield a constant response.
- support for constant rate load generation
- should be split into two programs? load generation & http requests?