loadaboy 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -19,4 +19,6 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
- *.beam
22
+ *.beam
23
+ Loadafile.rb
24
+ .rvmrc
data/README.rdoc CHANGED
@@ -1,47 +1,54 @@
1
- = loadaboy
1
+ = LoadaBoy
2
2
 
3
- = Simple Load Test service.
3
+ == Synopsis
4
4
 
5
- = Installation
5
+ A Load Tester that allows you to generate dynamic requests.
6
6
 
7
- = Synopsis
7
+ == Requirements
8
8
 
9
- How it works
9
+ LoadaBoy requires Erlang and RubyGems.
10
10
 
11
- * Write a custom generator in Loadafile.rb
12
- * run loadaboy domain workers requests-per-worker
11
+ == Installation
13
12
 
14
- == Loadafile.rb:
13
+ gem install loadaboy
15
14
 
16
- class Generator
17
- AD_SIZES = [{width: 250, height:360}, {width: 300, height:250}, {width: 336, height:280}, {width: 480, height:280}]
15
+ == How it works
18
16
 
19
- def random_size
20
- AD_SIZES[rand(AD_SIZES.length)]
21
- end
17
+ * Write a custom generator in Loadafile.rb:
22
18
 
23
- def random_string(n = 10)
24
- (1..n).map{ ('a'..'z').to_a[rand(26)] }.join
25
- end
19
+ * The generator should return a hash with the requests names as keys and the urls as values.
26
20
 
27
- def random_keywords(n = 20)
28
- (1..n).map{random_string(5+rand(20))}.join("+")
29
- end
21
+ * The generated request order is respected when the load test is running.
30
22
 
31
- def generate
32
- size = random_size
33
- {
34
- static: "/dynad/static.js",
35
- ad: "/dynad/ad/load_test_#{rand(3)}/#{size[:width]}/#{size[:height]}?div_id=#{random_string}&keywords=#{random_keywords}&track_url=http://www.zombo.com/"
36
- }
37
- end
38
- end
23
+ * One set of requests returned by the generator represents one job.
24
+
25
+ * run:
26
+ loadaboy domain-name number-of-workers number-of-jobs-per-worker
27
+
28
+ == Example
39
29
 
30
+ === Loadafile.rb:
31
+ require 'loadaboy'
32
+
33
+ def random_string(n = 10)
34
+ (1..n).map{ ('a'..'z').to_a[rand(26)] }.join
35
+ end
36
+
37
+ def random_keywords(n = 20)
38
+ (1..n).map{random_string(5+rand(20))}.join("+")
39
+ end
40
+
41
+ LoadaBoy.generator do
42
+ {
43
+ :first => "/static",
44
+ :second => "/dynamic/#{rand(3)}?random_string=#{random_string}&keywords=#{random_keywords}"
45
+ }
46
+ end
40
47
 
41
48
 
42
- == run:
43
49
 
44
- loadaboy http://localhost:3000 10 10
50
+ === Run:
51
+ loadaboy http://localhost:3000 10 10
45
52
 
46
53
  == Note on Patches/Pull Requests
47
54
 
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ begin
14
14
  gem.name = "loadaboy"
15
15
  gem.executables = %W(loadaboy)
16
16
  gem.summary = %Q{LoadaBoy - Load Test Gem to the Rescue!}
17
- gem.description = %Q{LoadaBoy - Load Test Gem to the Rescue!}
17
+ gem.description = %Q{LoadaBoy is a load testing gem.}
18
18
  gem.email = "jean-louis@icehouse.se"
19
19
  gem.homepage = "http://github.com/Jell/loadaboy"
20
20
  gem.authors = ["Jell"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/elib/worker.erl CHANGED
@@ -28,13 +28,13 @@ fetch_url(Url) ->
28
28
  Time = time_to_ms(Tac) - time_to_ms(Tic),
29
29
  case Result of
30
30
  timeout ->
31
- [timeout, Time];
31
+ [{"HTTP/1.1", 408, "Request Timeout"}, Time];
32
32
  {Header, _Params, _Body} ->
33
33
  [Header, Time]
34
34
  end
35
35
  catch
36
36
  _:_ ->
37
- ['FAIL', 0]
37
+ [{"HTTP/1.1", 400, "Bad Request"}, 0]
38
38
  end.
39
39
 
40
40
  time_to_ms({Mega, Sec, Micro})->
@@ -46,6 +46,6 @@ get_over_http(Url) ->
46
46
  {http, {RequestId, Result}} ->
47
47
  Result
48
48
  after
49
- 3000 ->
49
+ 10000 ->
50
50
  timeout
51
51
  end.
@@ -1,11 +1,12 @@
1
- LOADABOY_EXEC_DIR = `echo $LOADABOY_EXEC_DIR`.chomp
2
-
3
1
  require 'rubygems'
4
2
  require 'erlectricity'
5
3
  require 'loadaboy'
6
4
 
7
5
  extend LoadaBoy
8
6
 
7
+ LOADABOY_EXEC_DIR = `echo $LOADABOY_EXEC_DIR`.chomp
8
+ require "#{LOADABOY_EXEC_DIR}/Loadafile" if File.exist? "#{LOADABOY_EXEC_DIR}/Loadafile.rb"
9
+
9
10
  receive do |f|
10
11
  f.when([:prepare, Array]) do |array|
11
12
  f.send!([:result, generate_requests(array[0], array[1])])
data/lib/loadaboy.rb CHANGED
@@ -1,11 +1,31 @@
1
- require 'generator'
2
- require "#{LOADABOY_EXEC_DIR}/Loadafile" if File.exist? "#{LOADABOY_EXEC_DIR}/Loadafile.rb"
1
+ require 'enumerator'
3
2
 
4
3
  module LoadaBoy
4
+
5
+ class << self
6
+ def generator(&block)
7
+ define_method :generate, &block
8
+ end
9
+ end
10
+
11
+ protected
12
+
13
+ def generate
14
+ { :default => "/" }
15
+ end
16
+
5
17
  def generate_requests(workers_count, jobs_count)
6
- generator = Generator.new
7
18
  (1..workers_count).map do |i|
8
- ["worker#{i}".to_sym, (1..jobs_count).map { generator.generate.to_a }.flatten(1)]
19
+ ["worker#{i}".to_sym, generate_urls(jobs_count)]
9
20
  end
10
21
  end
11
- end
22
+
23
+ def generate_urls(jobs_count)
24
+ urls = []
25
+ (1..jobs_count).map { generate.to_a }.flatten.each_slice(2) do |slice|
26
+ urls << slice
27
+ end
28
+ urls
29
+ end
30
+ end
31
+
data/loadaboy.gemspec CHANGED
@@ -5,13 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{loadaboy}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jell"]
12
- s.date = %q{2010-10-19}
12
+ s.date = %q{2010-10-26}
13
13
  s.default_executable = %q{loadaboy}
14
- s.description = %q{LoadaBoy - Load Test Gem to the Rescue!}
14
+ s.description = %q{LoadaBoy is a load testing gem.}
15
15
  s.email = %q{jean-louis@icehouse.se}
16
16
  s.executables = ["loadaboy"]
17
17
  s.extensions = ["ext/extconf.rb", "ext/extconf.rb"]
@@ -33,7 +33,6 @@ Gem::Specification.new do |s|
33
33
  "ext/Makefile",
34
34
  "ext/extconf.rb",
35
35
  "lib/erlang_interface.rb",
36
- "lib/generator.rb",
37
36
  "lib/loadaboy.rb",
38
37
  "loadaboy.gemspec",
39
38
  "test/helper.rb",
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loadaboy
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 25
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- - 0
9
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Jell
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-10-19 00:00:00 +02:00
18
+ date: 2010-10-26 00:00:00 +02:00
18
19
  default_executable: loadaboy
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ">="
27
28
  - !ruby/object:Gem::Version
29
+ hash: 3
28
30
  segments:
29
31
  - 0
30
32
  version: "0"
@@ -38,6 +40,7 @@ dependencies:
38
40
  requirements:
39
41
  - - ~>
40
42
  - !ruby/object:Gem::Version
43
+ hash: 17
41
44
  segments:
42
45
  - 1
43
46
  - 1
@@ -45,7 +48,7 @@ dependencies:
45
48
  version: 1.1.1
46
49
  type: :runtime
47
50
  version_requirements: *id002
48
- description: LoadaBoy - Load Test Gem to the Rescue!
51
+ description: LoadaBoy is a load testing gem.
49
52
  email: jean-louis@icehouse.se
50
53
  executables:
51
54
  - loadaboy
@@ -69,7 +72,6 @@ files:
69
72
  - ext/Makefile
70
73
  - ext/extconf.rb
71
74
  - lib/erlang_interface.rb
72
- - lib/generator.rb
73
75
  - lib/loadaboy.rb
74
76
  - loadaboy.gemspec
75
77
  - test/helper.rb
@@ -88,6 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
90
  requirements:
89
91
  - - ">="
90
92
  - !ruby/object:Gem::Version
93
+ hash: 3
91
94
  segments:
92
95
  - 0
93
96
  version: "0"
@@ -96,6 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
99
  requirements:
97
100
  - - ">="
98
101
  - !ruby/object:Gem::Version
102
+ hash: 3
99
103
  segments:
100
104
  - 0
101
105
  version: "0"
data/lib/generator.rb DELETED
@@ -1,5 +0,0 @@
1
- class Generator
2
- def generate
3
- { default: "/" }
4
- end
5
- end