Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

60 lines (52 sloc) 1.506 kb
require 'rubygems'
require 'benchmark'
require 'net/http'
def http_request
res = Net::HTTP.get_response(URI.parse('http://example.com'))
raise "Body should be 'Hello'" unless res.body == 'Hello'
end
def fakeweb
FakeWeb.register_uri(:get, 'http://example.com', :body => 'Hello')
yield
ensure
FakeWeb.clean_registry
end
def webmock
WebMock.stub_request(:get, 'http://example.com').to_return(:body => 'Hello')
yield
ensure
WebMock.reset_webmock
end
def perform_benchmark(name)
puts "\n\nBenchmarking #{name}:"
Benchmark.benchmark do |b|
%w(webmock fakeweb).each do |type|
b.report(type) do
# this is a bit convoluted, but we want to ensure that each benchmark runs without the other library loaded,
# so we fork off a sub-process before requiring the libraries.
Process.fork do
require type
yield type
end
Process.wait
end
end
end
end
n = 5000
perform_benchmark("Single setup/teardown") do |type|
send(type) { n.times { http_request } }
end
perform_benchmark("Setup/teardown for each http request") do |type|
n.times { send(type) { http_request } }
end
# Output on my machine:
#
# Benchmarking Single setup/teardown:
# webmock 0.000000 0.000000 18.830000 ( 19.350281)
# fakeweb 0.000000 0.000000 1.930000 ( 2.049569)
#
#
# Benchmarking Setup/teardown for each http request:
# webmock 0.000000 0.000000 21.350000 ( 21.795557)
# fakeweb 0.000000 0.000000 2.490000 ( 2.707574)
Jump to Line
Something went wrong with that request. Please try again.