Project

httperfrb

0.01
No commit activity in last 3 years
No release in over 3 years
Simple interface for calling httperf via ruby.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

>= 0
>= 0

Runtime

>= 0
 Project Readme

HTTPerf.rb

Gem Version   Build Status

Simple Ruby interface for httperf.

Installing 'httperf'

Requires httperf, of course...

Mac

:::shell
sudo port install httperf

Debian / Ubuntu

:::shell
sudo apt-get install httperf

Redhat / CentOS

:::shell
sudo yum install httperf

My 'httperf'

See: httperf-0.9.1 with individual connection times.

Install

:::shell
gem install httperfrb

Usage - HTTPerf

Some basic usage examples.

:::ruby
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.

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

With HTTPerf::Parser

:::ruby
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

:::ruby
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:
:::shell
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:
:::shell
httperf --num-conns=10 --verbose | ruby -e 'require "httperf/parser"; require "yaml"; puts HTTPerf::Parser.parse(ARGF.read).to_yaml' > httperf.yml

Parser Keys:

:::ruby
: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"