bigbench 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +2 -0
- data/.travis.yml +9 -0
- data/README.textile +17 -0
- data/Rakefile +6 -1
- data/bigbench.gemspec +5 -0
- data/lib/bigbench/fragment.rb +6 -1
- data/lib/bigbench/version.rb +1 -1
- data/spec/bot_spec.rb +3 -2
- data/spec/fragment_spec.rb +28 -1
- data/spec/lib/test_web_server.rb +1 -1
- data/spec/post_processors/environment_spec.rb +5 -3
- metadata +89 -32
data/.rspec
ADDED
data/.travis.yml
ADDED
data/README.textile
CHANGED
@@ -15,6 +15,10 @@ h3. Installation
|
|
15
15
|
|
16
16
|
bc.. gem install bigbench
|
17
17
|
|
18
|
+
h3. Build Status
|
19
|
+
|
20
|
+
"!https://secure.travis-ci.org/southdesign/bigbench.png!":http://travis-ci.org/southdesign/bigbench
|
21
|
+
|
18
22
|
h3. Further Reading
|
19
23
|
|
20
24
|
* "BigBench RDoc":http://southdesign.github.com/bigbench
|
@@ -50,6 +54,15 @@ benchmark "login and logout" => "http://localhost:3000" do
|
|
50
54
|
post "/logout", :params => { :name => "test@user.com" }
|
51
55
|
end
|
52
56
|
|
57
|
+
# Each request randomly chooses one of the provided params pairs
|
58
|
+
benchmark "dynamic parameters" => "http://localhost:3000" do
|
59
|
+
post "/login", :params => [
|
60
|
+
{ :name => "test@user.com", :password => "secret" },
|
61
|
+
{ :name => "tommy@user.com", :password => "supersecret" },
|
62
|
+
{ :name => "funk@user.com", :password => "unknown" }
|
63
|
+
]
|
64
|
+
end
|
65
|
+
|
53
66
|
post_process :statistics
|
54
67
|
|
55
68
|
h3. Generator
|
@@ -199,6 +212,10 @@ h3. Test Results
|
|
199
212
|
|
200
213
|
h2. Version History
|
201
214
|
|
215
|
+
h3. 0.6
|
216
|
+
|
217
|
+
* Added dynamic parameters that can be supplied as an array. Every request randomly chooses a set of parameters.
|
218
|
+
|
202
219
|
h3. 0.5
|
203
220
|
|
204
221
|
* Changed @configure@ syntax to a common ruby pattern block style
|
data/Rakefile
CHANGED
@@ -3,7 +3,12 @@ require "rack"
|
|
3
3
|
require "RedCloth"
|
4
4
|
require "redcloth-formatters-rdoc"
|
5
5
|
require "rdoc/task"
|
6
|
+
require 'rspec/core/rake_task'
|
6
7
|
|
8
|
+
RSpec::Core::RakeTask.new(:spec) do |rspec|
|
9
|
+
rspec.rspec_opts = "-f d", "--color"
|
10
|
+
end
|
11
|
+
task :default => :spec
|
7
12
|
|
8
13
|
desc "Create and open documentation"
|
9
14
|
task :doc do
|
@@ -44,7 +49,7 @@ task :doc do
|
|
44
49
|
|
45
50
|
end
|
46
51
|
|
47
|
-
desc "Start Thin
|
52
|
+
desc "Start Thin Testserver"
|
48
53
|
task :server do
|
49
54
|
load "spec/lib/test_web_server.rb"
|
50
55
|
Rack::Handler::Thin.run Sinatra::Application, :Port => 3001
|
data/bigbench.gemspec
CHANGED
@@ -27,6 +27,8 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_development_dependency "eventmachine"
|
28
28
|
s.add_development_dependency "em-http-request"
|
29
29
|
s.add_development_dependency "sinatra"
|
30
|
+
s.add_development_dependency "RedCloth"
|
31
|
+
s.add_development_dependency "redcloth-formatters-rdoc"
|
30
32
|
|
31
33
|
s.add_runtime_dependency "activesupport", '>= 3.2.0'
|
32
34
|
s.add_runtime_dependency "actionpack", '>= 3.2.0'
|
@@ -35,4 +37,7 @@ Gem::Specification.new do |s|
|
|
35
37
|
s.add_runtime_dependency "em-http-request"
|
36
38
|
s.add_runtime_dependency "hirb"
|
37
39
|
s.add_runtime_dependency "thor", '>= 0.15.2'
|
40
|
+
s.add_runtime_dependency "rake"
|
41
|
+
s.add_runtime_dependency "gruff", ">= 0.3.6"
|
42
|
+
s.add_runtime_dependency "rmagick", ">= 2.13.1"
|
38
43
|
end
|
data/lib/bigbench/fragment.rb
CHANGED
@@ -47,6 +47,7 @@ module BigBench
|
|
47
47
|
|
48
48
|
# Initiates the request in the context of a <tt>Net::HTTP.start</tt> block
|
49
49
|
def run!
|
50
|
+
randomize_params
|
50
51
|
EventMachine::HttpRequest.new(@uri.to_s).send(@method, @request_options)
|
51
52
|
end
|
52
53
|
|
@@ -69,6 +70,10 @@ module BigBench
|
|
69
70
|
|
70
71
|
private
|
71
72
|
|
73
|
+
def randomize_params
|
74
|
+
@request_options[:body] = @options[:params].sample if @options[:params].kind_of?(Array)
|
75
|
+
end
|
76
|
+
|
72
77
|
def configure_options
|
73
78
|
|
74
79
|
# Basic Auth
|
@@ -77,7 +82,7 @@ module BigBench
|
|
77
82
|
|
78
83
|
# Body
|
79
84
|
@request_options[:body] = @options[:params] unless @options[:params].nil?
|
80
|
-
|
85
|
+
randomize_params
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
data/lib/bigbench/version.rb
CHANGED
data/spec/bot_spec.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require_relative "./helpers"
|
2
2
|
|
3
3
|
describe BigBench::Bot do
|
4
|
-
|
4
|
+
|
5
5
|
before(:each) do
|
6
|
+
Dir.chdir File.dirname(__FILE__)
|
6
7
|
BigBench::Store.reset!
|
7
8
|
end
|
8
9
|
|
@@ -16,7 +17,7 @@ describe BigBench::Bot do
|
|
16
17
|
it "should load and run a test from the redis store" do
|
17
18
|
BigBench::Store.setup!("http://localhost:6379").should be_true
|
18
19
|
|
19
|
-
test = File.open("
|
20
|
+
test = File.open("tests/local.rb", "rb"){ |file| file.read }
|
20
21
|
BigBench::Store.test = test
|
21
22
|
BigBench::Store.start
|
22
23
|
|
data/spec/fragment_spec.rb
CHANGED
@@ -220,7 +220,7 @@ describe BigBench::Fragment do
|
|
220
220
|
end
|
221
221
|
end
|
222
222
|
|
223
|
-
context "should send params in body" do
|
223
|
+
context "should send params in body", :params do
|
224
224
|
|
225
225
|
it "and track a 406 if no params were provided" do
|
226
226
|
fragment = BigBench::Fragment.parse(@benchmark){ post "/post/content" }.first
|
@@ -267,6 +267,33 @@ describe BigBench::Fragment do
|
|
267
267
|
@benchmark.tracker.trackings.first[:status] == 200
|
268
268
|
end
|
269
269
|
|
270
|
+
it "and sample a hash of params randomly if an array was specified" do
|
271
|
+
fragment = BigBench::Fragment.parse(@benchmark){
|
272
|
+
post "/post/content", :params => [
|
273
|
+
{ :name => "bigbench", :id => 1 },
|
274
|
+
{ :name => "bigbench2", :id => 2 }
|
275
|
+
]
|
276
|
+
}.first
|
277
|
+
result = nil
|
278
|
+
|
279
|
+
EventMachine.run { |http|
|
280
|
+
start = Time.now
|
281
|
+
http = fragment.run!
|
282
|
+
|
283
|
+
http.callback {
|
284
|
+
fragment.track!(start, Time.now, http)
|
285
|
+
http.response_header.status.should == 200
|
286
|
+
http.response.should match(/Test/)
|
287
|
+
EventMachine.stop
|
288
|
+
}
|
289
|
+
|
290
|
+
http.errback { puts "Error"; EventMachine.stop }
|
291
|
+
}
|
292
|
+
|
293
|
+
@benchmark.tracker.trackings.size.should == 1
|
294
|
+
@benchmark.tracker.trackings.first[:status] == 200
|
295
|
+
end
|
296
|
+
|
270
297
|
end
|
271
298
|
|
272
299
|
end
|
data/spec/lib/test_web_server.rb
CHANGED
@@ -42,6 +42,6 @@ end
|
|
42
42
|
|
43
43
|
# Needs Body Params
|
44
44
|
post "/post/content" do
|
45
|
-
status 406 unless params[:name] == "bigbench" and params[:id] == "1"
|
45
|
+
status 406 unless (params[:name] == "bigbench" and params[:id] == "1") or (params[:name] == "bigbench2" and params[:id] == "2")
|
46
46
|
"Test"
|
47
47
|
end
|
@@ -242,9 +242,11 @@ describe BigBench::PostProcessor::Environment do
|
|
242
242
|
polynomial_regression(:degree => 2).durations.derivation(0).size.should == 8
|
243
243
|
polynomial_regression(:degree => 2).durations.derivation(1).size.should == 8
|
244
244
|
polynomial_regression(:degree => 2).durations.degree.should == 2
|
245
|
-
polynomial_regression(:degree => 2).durations.coefficients.should
|
246
|
-
polynomial_regression(:degree => 2).durations.
|
247
|
-
polynomial_regression(:degree => 2).durations.
|
245
|
+
polynomial_regression(:degree => 2).durations.coefficients[0].should be_within(0.1).of(1.13)
|
246
|
+
polynomial_regression(:degree => 2).durations.coefficients[1].should be_within(0.1).of(0.04)
|
247
|
+
polynomial_regression(:degree => 2).durations.coefficients[2].should be_within(0.1).of(-0.00)
|
248
|
+
polynomial_regression(:degree => 2).durations.formula.should be_a(String)
|
249
|
+
polynomial_regression(:degree => 2).durations.formula(1).should be_a(String)
|
248
250
|
end
|
249
251
|
|
250
252
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigbench
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70330596158740 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70330596158740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &70330596158080 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.2.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70330596158080
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: actionpack
|
38
|
-
requirement: &
|
38
|
+
requirement: &70330596157460 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 3.2.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70330596157460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rack
|
49
|
-
requirement: &
|
49
|
+
requirement: &70330596156900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70330596156900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: thin
|
60
|
-
requirement: &
|
60
|
+
requirement: &70330596156180 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70330596156180
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: eventmachine
|
71
|
-
requirement: &
|
71
|
+
requirement: &70330596155760 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70330596155760
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: em-http-request
|
82
|
-
requirement: &
|
82
|
+
requirement: &70330596155260 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70330596155260
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: sinatra
|
93
|
-
requirement: &
|
93
|
+
requirement: &70330596154620 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,32 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70330596154620
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: RedCloth
|
104
|
+
requirement: &70330596170400 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70330596170400
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: redcloth-formatters-rdoc
|
115
|
+
requirement: &70330596169980 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *70330596169980
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: activesupport
|
104
|
-
requirement: &
|
126
|
+
requirement: &70330596169440 !ruby/object:Gem::Requirement
|
105
127
|
none: false
|
106
128
|
requirements:
|
107
129
|
- - ! '>='
|
@@ -109,10 +131,10 @@ dependencies:
|
|
109
131
|
version: 3.2.0
|
110
132
|
type: :runtime
|
111
133
|
prerelease: false
|
112
|
-
version_requirements: *
|
134
|
+
version_requirements: *70330596169440
|
113
135
|
- !ruby/object:Gem::Dependency
|
114
136
|
name: actionpack
|
115
|
-
requirement: &
|
137
|
+
requirement: &70330596168940 !ruby/object:Gem::Requirement
|
116
138
|
none: false
|
117
139
|
requirements:
|
118
140
|
- - ! '>='
|
@@ -120,10 +142,10 @@ dependencies:
|
|
120
142
|
version: 3.2.0
|
121
143
|
type: :runtime
|
122
144
|
prerelease: false
|
123
|
-
version_requirements: *
|
145
|
+
version_requirements: *70330596168940
|
124
146
|
- !ruby/object:Gem::Dependency
|
125
147
|
name: redis
|
126
|
-
requirement: &
|
148
|
+
requirement: &70330596168560 !ruby/object:Gem::Requirement
|
127
149
|
none: false
|
128
150
|
requirements:
|
129
151
|
- - ! '>='
|
@@ -131,10 +153,10 @@ dependencies:
|
|
131
153
|
version: '0'
|
132
154
|
type: :runtime
|
133
155
|
prerelease: false
|
134
|
-
version_requirements: *
|
156
|
+
version_requirements: *70330596168560
|
135
157
|
- !ruby/object:Gem::Dependency
|
136
158
|
name: eventmachine
|
137
|
-
requirement: &
|
159
|
+
requirement: &70330596168100 !ruby/object:Gem::Requirement
|
138
160
|
none: false
|
139
161
|
requirements:
|
140
162
|
- - ! '>='
|
@@ -142,10 +164,10 @@ dependencies:
|
|
142
164
|
version: '0'
|
143
165
|
type: :runtime
|
144
166
|
prerelease: false
|
145
|
-
version_requirements: *
|
167
|
+
version_requirements: *70330596168100
|
146
168
|
- !ruby/object:Gem::Dependency
|
147
169
|
name: em-http-request
|
148
|
-
requirement: &
|
170
|
+
requirement: &70330596167680 !ruby/object:Gem::Requirement
|
149
171
|
none: false
|
150
172
|
requirements:
|
151
173
|
- - ! '>='
|
@@ -153,10 +175,10 @@ dependencies:
|
|
153
175
|
version: '0'
|
154
176
|
type: :runtime
|
155
177
|
prerelease: false
|
156
|
-
version_requirements: *
|
178
|
+
version_requirements: *70330596167680
|
157
179
|
- !ruby/object:Gem::Dependency
|
158
180
|
name: hirb
|
159
|
-
requirement: &
|
181
|
+
requirement: &70330596167260 !ruby/object:Gem::Requirement
|
160
182
|
none: false
|
161
183
|
requirements:
|
162
184
|
- - ! '>='
|
@@ -164,10 +186,10 @@ dependencies:
|
|
164
186
|
version: '0'
|
165
187
|
type: :runtime
|
166
188
|
prerelease: false
|
167
|
-
version_requirements: *
|
189
|
+
version_requirements: *70330596167260
|
168
190
|
- !ruby/object:Gem::Dependency
|
169
191
|
name: thor
|
170
|
-
requirement: &
|
192
|
+
requirement: &70330596166760 !ruby/object:Gem::Requirement
|
171
193
|
none: false
|
172
194
|
requirements:
|
173
195
|
- - ! '>='
|
@@ -175,7 +197,40 @@ dependencies:
|
|
175
197
|
version: 0.15.2
|
176
198
|
type: :runtime
|
177
199
|
prerelease: false
|
178
|
-
version_requirements: *
|
200
|
+
version_requirements: *70330596166760
|
201
|
+
- !ruby/object:Gem::Dependency
|
202
|
+
name: rake
|
203
|
+
requirement: &70330596166340 !ruby/object:Gem::Requirement
|
204
|
+
none: false
|
205
|
+
requirements:
|
206
|
+
- - ! '>='
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
type: :runtime
|
210
|
+
prerelease: false
|
211
|
+
version_requirements: *70330596166340
|
212
|
+
- !ruby/object:Gem::Dependency
|
213
|
+
name: gruff
|
214
|
+
requirement: &70330596165800 !ruby/object:Gem::Requirement
|
215
|
+
none: false
|
216
|
+
requirements:
|
217
|
+
- - ! '>='
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: 0.3.6
|
220
|
+
type: :runtime
|
221
|
+
prerelease: false
|
222
|
+
version_requirements: *70330596165800
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: rmagick
|
225
|
+
requirement: &70330596165240 !ruby/object:Gem::Requirement
|
226
|
+
none: false
|
227
|
+
requirements:
|
228
|
+
- - ! '>='
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: 2.13.1
|
231
|
+
type: :runtime
|
232
|
+
prerelease: false
|
233
|
+
version_requirements: *70330596165240
|
179
234
|
description: Setup a network of bots only waiting to attack a few lonesome servers
|
180
235
|
and force them to their limits
|
181
236
|
email:
|
@@ -187,6 +242,8 @@ extra_rdoc_files: []
|
|
187
242
|
files:
|
188
243
|
- .DS_Store
|
189
244
|
- .gitignore
|
245
|
+
- .rspec
|
246
|
+
- .travis.yml
|
190
247
|
- Gemfile
|
191
248
|
- README.textile
|
192
249
|
- Rakefile
|