celluloid-benchmark 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ac0f4600f16c3bc2f95f799c1ddff901c800724
4
- data.tar.gz: d1cca2df8282bcdf0878bfdee906c970fed73e6e
3
+ metadata.gz: c2f324f0d80da8c02cbf069d16c6d9149ec54a78
4
+ data.tar.gz: 4cf506f01001f0f1c4deaedd9c63370c2126e7b6
5
5
  SHA512:
6
- metadata.gz: 08d614ea74ed9612c1cde83fec51c6aaa720f49207975273f6142ca80d170ca82722b3543cea887de6815158955357225f640f2714dc8efe8c9077149f9032cd
7
- data.tar.gz: 771aff0b9208297a0c2f483a43874c88086769a4f2b267ed4749856241024ed164cc2ed4503ff2ce1fa843498d807e9b5076e67cfbec6150062a90ccc3fcb9d0
6
+ metadata.gz: c77eb8790651fa84cc0aef9fe3f836a866babe4c82f46761148136d2613f476296c856d472d1f6163b3434c2e1031e32a7282902146b419be975114dbe9a9081
7
+ data.tar.gz: 723c251d7190fd5746f665ac53cd00979b310cba9d75935ec8c4f7b86ac9fe15b4fb1cce137f7d93b26a5683f49857e0dabacf6fbd0c9d70b05f8c16edfc3645
data/README.md CHANGED
@@ -8,7 +8,7 @@ Getting Started
8
8
  gem install celluloid-benchmark
9
9
  echo "benchmark :home_page, 1
10
10
  get 'https://github.com/scottwillson/celluloid-benchmark'" > session.rb
11
- celluloid-benchmark session.rb 1
11
+ celluloid-benchmark -d 1
12
12
 
13
13
  Congrats! You just load-tested the project's Github page.
14
14
 
@@ -64,8 +64,12 @@ JSON requests (e.g., a mobile app API)
64
64
  { "Content-Type" => "application/json" }
65
65
  )
66
66
 
67
+ Options
68
+ -------
69
+ celluloid-benchmark --help
70
+
67
71
  Test data
68
- ---------
72
+ =========
69
73
  Because test scenarios are plain Ruby, you can drive tests in many different ways. The
70
74
  [Faker gem](http://rubydoc.info/github/stympy/faker/master/frames) is handy
71
75
  for random, realistic test data:
@@ -87,7 +91,7 @@ Celluloid Benchmark can also pull random test data from CSV files. For example:
87
91
  `random_data(:post_zone)` pulls a random line from tmp/data/post_zones.csv
88
92
 
89
93
  Extending session DSL
90
- ---------------------
94
+ =====================
91
95
  The DSL is simple and will change in early releases. To add custom DSL methods, add methods to Visitor
92
96
  module CelluloidBenchmark
93
97
  class Visitor
@@ -1,15 +1,20 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
- require_relative "../lib/celluloid_benchmark"
3
+ require "slop"
4
4
 
5
- session_path = File.expand_path(ARGV[0])
5
+ opts = Slop.parse(help: true) do
6
+ banner "Usage: celluloid-benchmark [options]"
6
7
 
7
- duration = (ARGV[1] || 20).to_i
8
- if duration == 0
9
- duration = 20
8
+ on "d", "duration", "Start new visitors for :duration seconds. Default: 20.", argument: :optional
9
+ on "s", "session", "Session file path. Default: session.rb.", argument: :optional
10
+ on "t", "target", "Target server/environment, site. Default: local.", argument: :optional
11
+ on "v", "visitors", "Number of concurrent visitors. Default: CPU cores - 2 (minimum 1).", argument: :optional
10
12
  end
11
13
 
12
- benchmark_run = CelluloidBenchmark::Runner.run session_path, duration, ARGV[2] && ARGV[2].to_i
14
+ require_relative "../lib/celluloid_benchmark"
15
+ require_relative "../lib/celluloid_benchmark/visitor"
16
+
17
+ benchmark_run = CelluloidBenchmark::Runner.run opts.to_hash
13
18
 
14
19
  p benchmark_run
15
20
  puts
@@ -1,5 +1,6 @@
1
1
  require "celluloid"
2
2
  require_relative "session"
3
+ require_relative "target"
3
4
  require_relative "visitor_group"
4
5
 
5
6
  Celluloid.logger = nil
@@ -7,44 +8,45 @@ Celluloid.logger = nil
7
8
  module CelluloidBenchmark
8
9
  # Run a scenario in several Visitors and return a BenchmarkRun
9
10
  class Runner
10
- def self.run(session_path, duration = 20, visitors = nil)
11
- raise("session_path is required") unless session_path
12
- raise("'#{session_path}' does not exist") unless File.exists?(session_path)
11
+ def self.run(args)
12
+ session = args[:session] || "session.rb"
13
+ visitors = args[:visitors] || visitors_count(args[:visitors])
14
+ duration = (args[:duration] || 20).to_f
15
+ target = args[:target]
13
16
 
14
- require session_path
17
+ require File.expand_path(session)
15
18
 
16
19
  VisitorGroup.run!
17
- set_visitor_pool_size visitors
18
- visitors = visitors_count(visitors)
19
20
 
21
+ visitors = visitors_count(visitors)
20
22
  benchmark_run = Celluloid::Actor[:benchmark_run]
21
23
  benchmark_run.visitors = visitors
22
24
 
23
25
  benchmark_run.mark_start
24
- futures = run_sessions(benchmark_run, duration, visitors)
26
+ futures = run_sessions(benchmark_run, duration, visitors, Target.new_from_key(target))
25
27
  futures.map(&:value)
28
+
26
29
  benchmark_run.mark_end
27
30
 
28
31
  benchmark_run
29
32
  end
30
33
 
31
- def self.run_sessions(benchmark_run, duration, visitors)
34
+ def self.run_sessions(benchmark_run, duration, visitors, target)
32
35
  pool = Celluloid::Actor[:visitor_pool]
33
36
  futures = []
34
37
  visitors.times do
35
- futures << pool.future.run_session(benchmark_run, duration)
38
+ futures << pool.future.run_session(benchmark_run, duration, target)
36
39
  end
37
40
  futures
38
41
  end
39
42
 
40
- def self.set_visitor_pool_size(size)
41
- if size && size.to_i > 0
42
- Visitor.pool.size = size.to_i + 2
43
+ def self.visitors_count(count)
44
+ if count
45
+ count = count.to_i
46
+ else
47
+ count = Visitor.pool.size - 2
43
48
  end
44
- end
45
49
 
46
- def self.visitors_count(count)
47
- count = count || (Visitor.pool.size - 2)
48
50
  if count > 1
49
51
  count
50
52
  else
@@ -0,0 +1,45 @@
1
+ module CelluloidBenchmark
2
+ class Target
3
+ attr_reader :http_auth_password
4
+ attr_reader :http_auth_username
5
+ attr_reader :key
6
+ attr_reader :uri
7
+
8
+ def self.new_from_key(key, config_file_path = nil)
9
+ if key.nil? && config_file_path.nil?
10
+ return default_target
11
+ end
12
+
13
+ key ||= "local"
14
+ config_file_path ||= "config/targets.yml"
15
+
16
+ configs = YAML.load_file(config_file_path)
17
+ config = configs[key]
18
+
19
+ unless config
20
+ raise ArgumentError, "No target for '#{key}'"
21
+ end
22
+
23
+ if config["http_auth"]
24
+ Target.new(key, config["uri"], config["http_auth"]["username"], config["http_auth"]["password"])
25
+ else
26
+ Target.new(key, config["uri"])
27
+ end
28
+ end
29
+
30
+ def self.default_target
31
+ Target.new("local", "http://localhost")
32
+ end
33
+
34
+ def initialize(key, uri, http_auth_username = nil, http_auth_password = nil)
35
+ @http_auth_password = http_auth_password
36
+ @http_auth_username = http_auth_username
37
+ @key = key
38
+ @uri = uri
39
+ end
40
+
41
+ def http_auth?
42
+ http_auth_username && http_auth_password
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module CelluloidBenchmark
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
@@ -20,9 +20,11 @@ module CelluloidBenchmark
20
20
  attr_accessor :current_request_threshold
21
21
  attr_accessor :request_start_time
22
22
  attr_accessor :request_end_time
23
+ attr_reader :target
23
24
 
24
- def run_session(benchmark_run, duration)
25
+ def run_session(benchmark_run, duration, target = nil)
25
26
  @benchmark_run = benchmark_run
27
+ @target = target
26
28
 
27
29
  elapsed_time = 0
28
30
  started_at = benchmark_run.started_at
@@ -6,6 +6,6 @@ module CelluloidBenchmark
6
6
  # Supervised Actor pool of Visitors
7
7
  class VisitorGroup < Celluloid::SupervisionGroup
8
8
  supervise BenchmarkRun, as: :benchmark_run
9
- pool Visitor, as: :visitor_pool, size: 4
9
+ pool Visitor, as: :visitor_pool
10
10
  end
11
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: celluloid-benchmark
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Willson
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2014-06-20 00:00:00 Z
12
+ date: 2014-06-23 00:00:00 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: celluloid
@@ -62,6 +62,14 @@ dependencies:
62
62
  version: "1.25"
63
63
  type: :runtime
64
64
  version_requirements: *id005
65
+ - !ruby/object:Gem::Dependency
66
+ name: slop
67
+ prerelease: false
68
+ requirement: &id007 !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - *id006
71
+ type: :runtime
72
+ version_requirements: *id007
65
73
  description: |-
66
74
  Celluloid Benchmark realistically load tests websites. Write expressive, concise load tests in Ruby. Use Rubinius and Celluloid
67
75
  forpec high concurrency. Use Mechanize for a realistic (albeit non-JavaScript) browser client.
@@ -82,6 +90,7 @@ files:
82
90
  - lib/celluloid_benchmark/data_sources.rb
83
91
  - lib/celluloid_benchmark/runner.rb
84
92
  - lib/celluloid_benchmark/session.rb
93
+ - lib/celluloid_benchmark/target.rb
85
94
  - lib/celluloid_benchmark/version.rb
86
95
  - lib/celluloid_benchmark/visitor.rb
87
96
  - lib/celluloid_benchmark/visitor_group.rb