Ruby driver for httperf - automated load and performance testing
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
spec 0.2.20 release Jul 8, 2011
templates 0.2.20 release Jul 8, 2011
.document original commit Jan 24, 2010
Gemfile Remove dependency on Jeweler and use bundler instead Jun 13, 2011
Gemfile.lock Remove dependency on Jeweler and use bundler instead Jun 13, 2011
LICENSE original commit Jan 24, 2010
README.markdown Version 0.2.12 release Jun 15, 2011
hansel.gemspec 0.2.20 release Jul 8, 2011



Hansel is a pure ruby driver for httperf for automated load and performance testing. It will load a job queue file, in a yaml format, run httperf with each job

Installing Httperf and Hansel


For Linux (Ubuntu):

apt-get update && apt-get -y install rubygems httperf ruby1.8-dev libcurl4-gnutls-dev
gem install rubygems-update -v 1.3.0
export PATH=$PATH:/var/lib/gems/1.8/bin
gem update --system
gem install hansel

note: tested with EC2 ami-1b729472

On MacOS X using homebrew:

brew install httperf
gem install hansel

Octave (optional)

Downloading the pre-build binary

Building Octave (warning: long!)

(note: using homebrew seems broken at the moment)

brew install gfortran octave

or with MacPorts (broken at the moment):

sudo port install octave

Example usage

Create a job queue file in ~/.hansel/jobs.yml:

  - :server:
    :uri: /
    :num_conns: 50
    :low_rate: 10
    :high_rate: 50
    :rate_step: 10
    :description: example

  - :server:
    :uri: /
    :num_conns: 50
    :low_rate: 10
    :high_rate: 50
    :rate_step: 10
    :description: apple

and run Hansel

hansel --verbose --format=octave

By default, the output is written into the ~/hansel_output directory. When the octave format is specified, it uses the default template octave.m.erb in the project templates. Here is a sample output from the previous job:

rate              = [10, 20, 30, 40, 50];
request_rate      = [8.8, 17.6, 18.9, 24.6, 19.3];
connection_rate   = [8.8, 17.6, 18.9, 24.6, 19.3];
reply_rate_avg    = [0.0, 0.0, 0.0, 0.0, 0.0];
reply_rate_max    = [0.0, 0.0, 0.0, 0.0, 0.0];
reply_time        = [62.7, 56.0, 55.8, 45.3, 118.0];
reply_rate_stddev = [0.0, 0.0, 0.0, 0.0, 0.0];
errors            = [0, 0, 0, 0, 0];

plot(rate, request_rate, '-k*');
hold on;
plot(rate, connection_rate, '-kd');
hold on;
plot(rate, reply_rate_max, '-kp');
hold on;
plot(rate, reply_rate_max, '-k+');
hold on;
plot(rate, reply_rate_stddev, '-kh');
hold on;
plot(rate, reply_time, '-g*');
hold on;
plot(rate, errors, '-r*');

grid on;

axis([0 50 0 50]);
title('Hansel report for  (10 connections per run)')
xlabel('Demanded Request Rate');
legend('Request Rate', 'Connection Rate', 'Avg. reply rate', 'Max. reply rate', 'Reply rate StdDev', 'Reply time', 'Errors');
print('', '-dpng')

Run octave on it will produce graph as a png file.

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.




Copyright (c) 2009 Paul Mylchreest. See LICENSE for details.