HTTPerf.rb

Gem Version   Build Status

Simple Ruby interface for httperf.

Installing 'httperf'

Requires httperf, of course...

Mac

sudo port install httperf

Debian / Ubuntu

sudo apt-get install httperf

Redhat / CentOS

sudo yum install httperf

My 'httperf'

See: httperf-0.9.1 with individual connection times.

Install

gem install httperfrb

Usage - HTTPerf

Some basic usage examples.

require 'httperf'
perf = HTTPerf.new( "server" => "host", "port" => 8080, "uri" => "/foo" )
puts perf.run

perf.update_option("uri", "/foo/bar")
thread = perf.fork
while((thread.alive?))
  sleep 0.01
  print "#"
end
unless perf.fork_err.nil?
  puts perf.fork_out
end

Teeing output

Added in 0.3.10.

Adding the tee param will print httperf output while running the process.

require 'httperf'
perf = HTTPerf.new( "server" => "host", "port" => 8080, "uri" => "/foo", "tee" => true )
output = perf.run

With HTTPerf::Parser

require 'httperf'
perf = HTTPerf.new( "server" => "host", "port" => 8080, "uri" => "/foo" )
puts perf.parse = true
puts perf.run

# or directly

puts HTTPerf::Parser.parse( HTTPerf.new( "server" => "host", "port" => 8080, "uri" => "/foo" ).run )

Useage - HTTPerf::Parser

require 'httperf/parser'

# read result from a file, for example
puts HTTPerf::Parser.parse( File.open("httperf.out", "r").read )

# or verbose output
puts HTTPerf::Parser.parse( File.open("httperf_verbose.out", "r").read, true )

From the command line:

Something I've been playing around with, it's more of hack really. But it works well for seralizing output to YAML or JSON:

To JSON file:
httperf --num-conns=10 --verbose | ruby -e 'require "httperf/parser"; require "json"; puts HTTPerf::Parser.parse(ARGF.read).to_json' > httperf.json
To YAML file:
httperf --num-conns=10 --verbose | ruby -e 'require "httperf/parser"; require "yaml"; puts HTTPerf::Parser.parse(ARGF.read).to_yaml' > httperf.yml

Parser Keys:

:command
:max_connect_burst_length
:total_connections
:total_requests
:total_replies
:total_test_duration
:connection_rate_per_sec
:connection_rate_ms_conn
:connection_time_min
:connection_time_avg
:connection_time_max
:connection_time_median
:connection_time_stddev
:connection_time_connect
:connection_length
:request_rate_per_sec
:request_rate_ms_request
:request_size
:reply_rate_min
:reply_rate_avg
:reply_rate_max
:reply_rate_stddev
:reply_rate_samples
:reply_time_response
:reply_time_transfer
:reply_size_header
:reply_size_content
:reply_size_footer
:reply_size_total
:reply_status_1xx
:reply_status_2xx
:reply_status_3xx
:reply_status_4xx
:reply_status_5xx
:cpu_time_user_sec
:cpu_time_system_sec
:cpu_time_user_pct
:cpu_time_system_pct
:cpu_time_total_pct
:net_io_kb_sec
:net_io_bps
:errors_total
:errors_client_timeout
:errors_socket_timeout
:errors_conn_refused
:errors_conn_reset
:errors_fd_unavail
:errors_addr_unavail
:errors_ftab_full
:errors_other

Verbose Percentile Parser Keys:

:connection_time_75_pct
:connection_time_80_pct
:connection_time_85_pct
:connection_time_90_pct
:connection_time_95_pct
:connection_time_99_pct

Accepted Options:

  • "add-header"
  • "burst-length"
  • "client"
  • "close-with-reset"
  • "debug"
  • "failure-status"
  • "hog"
  • "http-version"
  • "max-connections"
  • "max-piped-calls"
  • "method"
  • "no-host-hdr"
  • "num-calls"
  • "num-conns"
  • "period"
  • "port"
  • "print-reply"
  • "print-request"
  • "rate"
  • "recv-buffer"
  • "retry-on-failure"
  • "send-buffer"
  • "server"
  • "server-name"
  • "session-cookies"
  • "ssl"
  • "ssl-ciphers"
  • "ssl-no-reuse"
  • "think-timeout"
  • "timeout"
  • "uri"
  • "verbose"
  • "version"
  • "wlog"
  • "wsess"
  • "wsesslog"
  • "wset"