bigbench 0.0.5 → 0.0.6
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/.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
|