Project

hansel

0.01
No commit activity in last 3 years
No release in over 3 years
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.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

hansel

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

Httperf

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
update_rubygems
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

http://octave.sourceforge.net/

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: www.example.com
    :uri: /
    :num_conns: 50
    :low_rate: 10
    :high_rate: 50
    :rate_step: 10
    :description: example

  - :server: www.apple.com
    :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 www.apple.com:80/  (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('www.apple.com-80-osx-10.png', '-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.

Meta

References

Copyright

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