nethttp_ab 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.0.3 fixed a bug in url regexp and added a test suite to cover it, also added a test suite for --follow-links option, changed the way options are parsed - now it's possible to specify both "-n100 -c20" and "-n 100 -c 25"
2
+
1
3
  v0.0.2 deleted trollop gem as a requirement, added nokogiri dependency to gemspec, added MIT license file, fixed small issue with benchmarked site's url, added wrong site address handling [06-04-2011]
2
4
 
3
5
  v0.0.1. first release [05-04-2011]
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "nokogiri", ">= 1.4.2"
6
+
7
+ group :test do
8
+ gem "mocha", :require => false
9
+ end
data/Manifest CHANGED
@@ -1,4 +1,5 @@
1
1
  CHANGELOG
2
+ Gemfile
2
3
  LICENSE
3
4
  Manifest
4
5
  README
@@ -12,4 +13,11 @@ nethttp_ab.gemspec
12
13
  test/nethttp_ab_test.rb
13
14
  test/requests_queue_test.rb
14
15
  test/resources/index.html
16
+ test/resources/links.html
17
+ test/resources/links1.html
18
+ test/resources/links2.html
19
+ test/resources/links3.html
20
+ test/resources/links4.html
21
+ test/resources/links5.html
15
22
  test/simple_requests_queue_test.rb
23
+ test/url_regexp_test.rb
data/README CHANGED
@@ -1,8 +1,17 @@
1
1
  Simple tool to benchmark sites (rpm, response time, etc)
2
2
 
3
- SIMPLE USAGE
3
+ EXAMPLES:
4
+
4
5
  3 concurrent threads and 100 total requests:
5
- nethttp_ab -n 100 -c 3 http://www.yoursite.com
6
+ nethttp_ab -n100 -c3 http://www.yoursite.com
6
7
 
7
- OR simulate user and follow all local links on the page:
8
+ OR simulate one user and follow all local links on the page:
8
9
  nethttp_ab -f http://localhost:3000
10
+
11
+ simulate 3 users (all local links on the page will be visited once)
12
+ nethttp_ab --follow_links -c3 http://localhost:3000
13
+
14
+ Issue tracker: https://github.com/german/nethttp_ab/issues
15
+
16
+
17
+ Copyright © 2011 Dmitrii Samoilov, released under the MIT license
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('nethttp_ab', '0.0.2') do |p|
5
+ Echoe.new('nethttp_ab', '0.0.3') do |p|
6
6
  p.description = "Simple tool to test and benchmark sites"
7
7
  p.url = "http://github.com/german/nethttp_ab"
8
8
  p.author = "Dmitrii Samoilov"
data/bin/nethttp_ab CHANGED
@@ -4,10 +4,13 @@ require File.dirname(File.expand_path(__FILE__)) + '/../lib/requester.rb'
4
4
 
5
5
  # SIMPLE USAGE:
6
6
  # 3 concurrent threads and 100 total requests
7
- # nethttp_ab -n 100 -c 3 http://www.yoursite.com
7
+ # nethttp_ab -n100 -c3 http://www.yoursite.com
8
8
  #
9
- # OR simulate user and follow all local links on the page
9
+ # OR simulate one user and follow all local links on the page
10
10
  # nethttp_ab -f http://localhost:3000
11
+ #
12
+ # simulate 3 users (all local links on the page will be visited once)
13
+ # nethttp_ab --follow_links -c3 http://localhost:3000
11
14
 
12
15
  opts = {}
13
16
 
@@ -17,27 +20,23 @@ else
17
20
  opts[:follow_links] = false
18
21
  end
19
22
 
20
- if ARGV.include?('-c')
21
- opts[:concurrent_threads] = ARGV[ARGV.index('-c') + 1].to_i
22
- ARGV.delete('-c')
23
- ARGV.delete(opts[:concurrent_threads])
23
+ if ARGV.join.match(/-c\s*(\d*)/)
24
+ opts[:concurrent_threads] = $1.to_i
24
25
  else
25
- opts[:concurrent_threads] = 3
26
+ opts[:concurrent_threads] = 1
26
27
  end
27
28
 
28
- if ARGV.include?('-n')
29
- opts[:requests] = ARGV[ARGV.index('-n') + 1].to_i
30
- ARGV.delete('-n')
31
- ARGV.delete(opts[:requests])
29
+ if ARGV.join.match(/-n\s*(\d*)/)
30
+ opts[:requests] = $1.to_i
32
31
  else
33
32
  opts[:requests] = 10
34
33
  end
35
34
 
36
35
  url_to_benchmark = "http://localhost:3000/"
37
36
 
38
- # search for the url to perform benchmarking on
37
+ # search in ARGV for the url to perform benchmarking on
39
38
  ARGV.each do |arg|
40
- url_to_benchmark = arg if arg =~ /^(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$/
39
+ url_to_benchmark = arg if arg =~ NethttpAb::Requester::URL_REGEXP
41
40
  end
42
41
 
43
42
  url_to_benchmark = "http://" + url_to_benchmark if url_to_benchmark !~ /^https?:\/\//
data/lib/requester.rb CHANGED
@@ -12,6 +12,8 @@ module NethttpAb
12
12
  attr_accessor :successfull_requests
13
13
  attr_accessor :failed_requests
14
14
 
15
+ URL_REGEXP = /^(https?:\/\/)?(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}/
16
+
15
17
  def initialize
16
18
  @response_length = 0
17
19
  @total_time = 0.0
@@ -100,7 +102,7 @@ module NethttpAb
100
102
  puts "The url you provided is wrong, please check is it really ssl encrypted"
101
103
  exit
102
104
  rescue Errno::ECONNREFUSED => e
103
- puts "Connection error, please check your internet connection or make sure the server is running (it's local)"
105
+ puts "Connection error, please check your internet connection or make sure the server is responding"
104
106
  exit
105
107
  rescue SocketError => e
106
108
  puts e.message
@@ -118,9 +120,13 @@ module NethttpAb
118
120
  Net::HTTP::Get.new(@url.path)
119
121
  end
120
122
 
123
+ # TODO
124
+ #req.add_field "User-Agent", "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16"
125
+
121
126
  @total_time += Benchmark.realtime do
122
127
  begin
123
128
  response = http_opened_session.request(req)
129
+
124
130
  @mutex.synchronize do
125
131
  @response_length += response.body.length
126
132
  @successfull_requests += 1
data/nethttp_ab.gemspec CHANGED
@@ -2,24 +2,24 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{nethttp_ab}
5
- s.version = "0.0.2"
5
+ s.version = "0.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Dmitrii Samoilov"]
9
- s.date = %q{2011-04-06}
9
+ s.date = %q{2011-04-12}
10
10
  s.default_executable = %q{nethttp_ab}
11
11
  s.description = %q{Simple tool to test and benchmark sites}
12
12
  s.email = %q{germaninthetown@gmail.com}
13
13
  s.executables = ["nethttp_ab"]
14
14
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "bin/nethttp_ab", "lib/net.rb", "lib/requester.rb", "lib/requests_queue.rb", "lib/simple_requests_queue.rb"]
15
- s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "bin/nethttp_ab", "lib/net.rb", "lib/requester.rb", "lib/requests_queue.rb", "lib/simple_requests_queue.rb", "nethttp_ab.gemspec", "test/nethttp_ab_test.rb", "test/requests_queue_test.rb", "test/resources/index.html", "test/simple_requests_queue_test.rb"]
15
+ s.files = ["CHANGELOG", "Gemfile", "LICENSE", "Manifest", "README", "Rakefile", "bin/nethttp_ab", "lib/net.rb", "lib/requester.rb", "lib/requests_queue.rb", "lib/simple_requests_queue.rb", "nethttp_ab.gemspec", "test/nethttp_ab_test.rb", "test/requests_queue_test.rb", "test/resources/index.html", "test/resources/links.html", "test/resources/links1.html", "test/resources/links2.html", "test/resources/links3.html", "test/resources/links4.html", "test/resources/links5.html", "test/simple_requests_queue_test.rb", "test/url_regexp_test.rb"]
16
16
  s.homepage = %q{http://github.com/german/nethttp_ab}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Nethttp_ab", "--main", "README"]
18
18
  s.require_paths = ["lib"]
19
19
  s.rubyforge_project = %q{nethttp_ab}
20
20
  s.rubygems_version = %q{1.6.2}
21
21
  s.summary = %q{Simple tool to test and benchmark sites}
22
- s.test_files = ["test/nethttp_ab_test.rb", "test/requests_queue_test.rb", "test/simple_requests_queue_test.rb"]
22
+ s.test_files = ["test/url_regexp_test.rb", "test/nethttp_ab_test.rb", "test/requests_queue_test.rb", "test/simple_requests_queue_test.rb"]
23
23
 
24
24
  if s.respond_to? :specification_version then
25
25
  s.specification_version = 3
@@ -15,19 +15,31 @@ class OpenSession
15
15
  end
16
16
 
17
17
  class NetHttpAbTest < Test::Unit::TestCase
18
- def test_simple
18
+ def setup
19
19
  Net::HTTP.any_instance.stubs(:start).returns(OpenSession.new)
20
-
21
- requester = NethttpAb::Requester.new
20
+ @requester = NethttpAb::Requester.new
21
+ end
22
+
23
+ def test_simple
24
+ @requester.url = "http://localhost/index.html"
25
+ @requester.concurrent_users = 3
26
+ @requester.num_of_requests = 10
27
+ @requester.follow_links = false
28
+
29
+ @requester.proceed
30
+
31
+ assert_equal 10, @requester.successfull_requests
32
+ assert_equal 0, @requester.failed_requests
33
+ end
22
34
 
23
- requester.url = "http://localhost/index.html"
24
- requester.concurrent_users = 3
25
- requester.num_of_requests = 10
26
- requester.follow_links = false
35
+ def test_follow_links
36
+ @requester.url = "http://localhost/links.html"
37
+ @requester.concurrent_users = 3
38
+ @requester.follow_links = true
27
39
 
28
- requester.proceed
40
+ @requester.proceed
29
41
 
30
- assert_equal 10, requester.successfull_requests
31
- assert_equal 0, requester.failed_requests
42
+ assert_equal 5, @requester.successfull_requests
43
+ assert_equal 0, @requester.failed_requests
32
44
  end
33
45
  end
@@ -1,3 +1,8 @@
1
1
  <html>
2
- <body>test</body>
2
+ <head>
3
+ <title>Test</title>
4
+ </head>
5
+ <body>
6
+ <h3>test</h3>
7
+ </body>
3
8
  </html>
@@ -0,0 +1,15 @@
1
+ <html>
2
+ <head>
3
+ <title>Follow links test</title>
4
+ </head>
5
+ <body>
6
+ <h3>Follow links test</h3>
7
+ <ul>
8
+ <li><a href="links1.html">Link #1</a></li>
9
+ <li><a href="links2.html">Link #2</a></li>
10
+ <li><a href="links3.html">Link #3</a></li>
11
+ <li><a href="links4.html">Link #4</a></li>
12
+ <li><a href="links5.html">Link #5</a></li>
13
+ </ul>
14
+ </body>
15
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Links #1</title>
4
+ </head>
5
+ <body>
6
+ <h3>Links #1</h3>
7
+ </body>
8
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Links #2</title>
4
+ </head>
5
+ <body>
6
+ <h3>Links #2</h3>
7
+ </body>
8
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Links #3</title>
4
+ </head>
5
+ <body>
6
+ <h3>Links #3</h3>
7
+ </body>
8
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Links #4</title>
4
+ </head>
5
+ <body>
6
+ <h3>Links #4</h3>
7
+ </body>
8
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>Links #5</title>
4
+ </head>
5
+ <body>
6
+ <h3>Links #5</h3>
7
+ </body>
8
+ </html>
@@ -0,0 +1,21 @@
1
+ require 'test/unit'
2
+
3
+ require File.dirname(File.expand_path(__FILE__)) + '/../lib/requester.rb'
4
+
5
+ class UrlRegexpTest < Test::Unit::TestCase
6
+ def setup
7
+ @fail_urls = %w{www./yandex.ru yandex.123ru germaninthetown@gmail.com abcde}
8
+
9
+ @correct_urls = %w{www.google.com google.com http://google.com http://mail.ya.ru mail.ya.ru/ mail.ya.ru/test http://www.my-site.org/articles/2011/04/12/123-nethttpab-is-great}
10
+ end
11
+
12
+ def test_url_regexp
13
+ @correct_urls.each do |correct_url|
14
+ assert(correct_url =~ NethttpAb::Requester::URL_REGEXP)
15
+ end
16
+
17
+ @fail_urls.each do |fail_url|
18
+ assert(fail_url !~ NethttpAb::Requester::URL_REGEXP)
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nethttp_ab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-04-06 00:00:00.000000000 +03:00
12
+ date: 2011-04-12 00:00:00.000000000 +03:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
  description: Simple tool to test and benchmark sites
@@ -28,6 +28,7 @@ extra_rdoc_files:
28
28
  - lib/simple_requests_queue.rb
29
29
  files:
30
30
  - CHANGELOG
31
+ - Gemfile
31
32
  - LICENSE
32
33
  - Manifest
33
34
  - README
@@ -41,7 +42,14 @@ files:
41
42
  - test/nethttp_ab_test.rb
42
43
  - test/requests_queue_test.rb
43
44
  - test/resources/index.html
45
+ - test/resources/links.html
46
+ - test/resources/links1.html
47
+ - test/resources/links2.html
48
+ - test/resources/links3.html
49
+ - test/resources/links4.html
50
+ - test/resources/links5.html
44
51
  - test/simple_requests_queue_test.rb
52
+ - test/url_regexp_test.rb
45
53
  has_rdoc: true
46
54
  homepage: http://github.com/german/nethttp_ab
47
55
  licenses: []
@@ -74,6 +82,7 @@ signing_key:
74
82
  specification_version: 3
75
83
  summary: Simple tool to test and benchmark sites
76
84
  test_files:
85
+ - test/url_regexp_test.rb
77
86
  - test/nethttp_ab_test.rb
78
87
  - test/requests_queue_test.rb
79
88
  - test/simple_requests_queue_test.rb