blitz 0.1.26 → 0.1.27
Sign up to get free protection for your applications and to get access to all the features.
- data/blitz.gemspec +2 -2
- data/lib/blitz.rb +1 -0
- data/lib/blitz/command/curl.rb +44 -6
- data/lib/blitz/curl.rb +5 -0
- data/spec/blitz/command/curl_spec.rb +53 -4
- data/spec/blitz/curl_spec.rb +12 -1
- metadata +2 -2
data/blitz.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{blitz}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.27"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["pcapr"]
|
12
|
-
s.date = %q{2012-
|
12
|
+
s.date = %q{2012-08-29}
|
13
13
|
s.default_executable = %q{blitz}
|
14
14
|
s.description = %q{Make load and performance testing a fun sport}
|
15
15
|
s.email = %q{support@blitz.io}
|
data/lib/blitz.rb
CHANGED
data/lib/blitz/command/curl.rb
CHANGED
@@ -157,8 +157,18 @@ class Curl < Command # :nodoc:
|
|
157
157
|
job.queue
|
158
158
|
msg "rushing from #{yellow(job.region)}..."
|
159
159
|
puts
|
160
|
+
|
161
|
+
if job.args.member?('output')
|
162
|
+
file = CSV.open(job.args['output'] || 'blitz.csv', 'w')
|
163
|
+
end
|
164
|
+
|
160
165
|
job.result do |result|
|
161
|
-
|
166
|
+
if file
|
167
|
+
csv_rush_result file, result, last_index
|
168
|
+
else
|
169
|
+
print_rush_result job.args, result, last_index
|
170
|
+
end
|
171
|
+
|
162
172
|
if not result.timeline.empty?
|
163
173
|
last_index = result.timeline.size
|
164
174
|
end
|
@@ -173,9 +183,11 @@ class Curl < Command # :nodoc:
|
|
173
183
|
error "#{yellow(e.region)}: #{red(e.message)}"
|
174
184
|
rescue ::Blitz::Curl::Error => e
|
175
185
|
error red(e.message)
|
186
|
+
ensure
|
187
|
+
file.close if file
|
176
188
|
end
|
177
189
|
end
|
178
|
-
|
190
|
+
|
179
191
|
def print_rush_result args, result, last_index
|
180
192
|
if last_index.nil?
|
181
193
|
print yellow("%6s " % "Time")
|
@@ -188,11 +200,11 @@ class Curl < Command # :nodoc:
|
|
188
200
|
print "%s" % "Mbps"
|
189
201
|
puts
|
190
202
|
end
|
191
|
-
|
203
|
+
|
192
204
|
if last_index and result.timeline.size == last_index
|
193
205
|
return
|
194
206
|
end
|
195
|
-
|
207
|
+
|
196
208
|
last = result.timeline[-2]
|
197
209
|
curr = result.timeline[-1]
|
198
210
|
print yellow("%5.1fs " % curr.timestamp)
|
@@ -201,7 +213,7 @@ class Curl < Command # :nodoc:
|
|
201
213
|
print green("%8d " % curr.hits)
|
202
214
|
print magenta("%8d " % curr.timeouts)
|
203
215
|
print red("%8d " % curr.errors)
|
204
|
-
|
216
|
+
|
205
217
|
if last
|
206
218
|
elapsed = curr.timestamp - last.timestamp
|
207
219
|
mbps = ((curr.txbytes + curr.rxbytes) - (last.txbytes + last.rxbytes))/elapsed/1024.0/1024.0
|
@@ -209,10 +221,35 @@ class Curl < Command # :nodoc:
|
|
209
221
|
print green(" %7.2f " % htps)
|
210
222
|
print "%.2f" % mbps
|
211
223
|
end
|
212
|
-
|
224
|
+
|
213
225
|
print "\n"
|
214
226
|
end
|
215
227
|
|
228
|
+
def csv_rush_result file, result, last_index
|
229
|
+
if last_index.nil?
|
230
|
+
file << ["Time", "Users", "Response", "Hits", "Timeouts", "Errors", "Hits/s", "Mbps"]
|
231
|
+
end
|
232
|
+
|
233
|
+
if last_index and result.timeline.size == last_index
|
234
|
+
return
|
235
|
+
end
|
236
|
+
|
237
|
+
last = result.timeline[-2]
|
238
|
+
curr = result.timeline[-1]
|
239
|
+
arr = [curr.timestamp, curr.volume, curr.duration, curr.hits, curr.timeouts, curr.errors ]
|
240
|
+
|
241
|
+
if last
|
242
|
+
elapsed = curr.timestamp - last.timestamp
|
243
|
+
mbps = ((curr.txbytes + curr.rxbytes) - (last.txbytes + last.rxbytes))/elapsed/1024.0/1024.0
|
244
|
+
htps = (curr.hits - last.hits)/elapsed
|
245
|
+
arr << htps
|
246
|
+
arr << mbps
|
247
|
+
end
|
248
|
+
|
249
|
+
file << arr
|
250
|
+
file.flush
|
251
|
+
end
|
252
|
+
|
216
253
|
def help
|
217
254
|
helps = [
|
218
255
|
{ :short => '-A', :long => '--user-agent', :value => '<string>', :help => 'User-Agent to send to server' },
|
@@ -230,6 +267,7 @@ class Curl < Command # :nodoc:
|
|
230
267
|
{ :short => '-X', :long => '--request', :value => '<string>', :help => 'Request method to use (GET, HEAD, PUT, etc.)' },
|
231
268
|
{ :short => '-v', :long => '--variable', :value => '<string>', :help => 'Define a variable to use' },
|
232
269
|
{ :short => '-V', :long => '--verbose', :value => '', :help => 'Print the request/response headers' },
|
270
|
+
{ :short => '-o', :long => '--output', :value => '<filename>', :help => 'Output to file (CSV)' },
|
233
271
|
{ :short => '-1', :long => '--tlsv1', :value => '', :help => 'Use TLSv1 (SSL)' },
|
234
272
|
{ :short => '-2', :long => '--sslv2', :value => '', :help => 'Use SSLv2 (SSL)' },
|
235
273
|
{ :short => '-3', :long => '--sslv3', :value => '', :help => 'Use SSLv3 (SSL)' }
|
data/lib/blitz/curl.rb
CHANGED
@@ -19,7 +19,7 @@ describe Blitz::Command::Curl do
|
|
19
19
|
}
|
20
20
|
}
|
21
21
|
}
|
22
|
-
|
22
|
+
|
23
23
|
def mocked_sprint_request
|
24
24
|
Blitz::Curl::Sprint::Request.new(sprint_data)
|
25
25
|
end
|
@@ -48,6 +48,30 @@ describe Blitz::Command::Curl do
|
|
48
48
|
}
|
49
49
|
Blitz::Curl::Sprint::Result.new(sprint)
|
50
50
|
end
|
51
|
+
|
52
|
+
def mocked_rush
|
53
|
+
rush = {
|
54
|
+
'result' => {
|
55
|
+
'region' => 'california',
|
56
|
+
'timeline' => [
|
57
|
+
'timestamp' => 1.50353,
|
58
|
+
'volume' => 2,
|
59
|
+
'duration' => 0.42632,
|
60
|
+
'executed' => 2,
|
61
|
+
'timeouts' => 0,
|
62
|
+
'errors' => 0,
|
63
|
+
'steps' => [
|
64
|
+
'duration' => 0.0,
|
65
|
+
'connect' => 0.0,
|
66
|
+
'errors' => 0,
|
67
|
+
'timeouts' => 5,
|
68
|
+
'asserts' => 0
|
69
|
+
]
|
70
|
+
]
|
71
|
+
}
|
72
|
+
}
|
73
|
+
Blitz::Curl::Rush::Result.new(rush)
|
74
|
+
end
|
51
75
|
|
52
76
|
context "#print_sprint_header" do
|
53
77
|
def check_print_sprint_header path="/mocked/path/head.txt"
|
@@ -90,7 +114,31 @@ describe Blitz::Command::Curl do
|
|
90
114
|
}
|
91
115
|
end
|
92
116
|
end
|
93
|
-
|
117
|
+
|
118
|
+
context "#csv_rush_result" do
|
119
|
+
|
120
|
+
it "should check if the rush results get dumped in csv format" do
|
121
|
+
file = CSV.open('blitztest.csv', 'w')
|
122
|
+
|
123
|
+
result = mocked_rush
|
124
|
+
obj = Blitz::Command::Curl.new
|
125
|
+
obj.send(:csv_rush_result, file, result, nil)
|
126
|
+
file.close
|
127
|
+
|
128
|
+
file = CSV.open('blitztest.csv', 'r').read()
|
129
|
+
output = file.last
|
130
|
+
timeline = result.timeline.last
|
131
|
+
|
132
|
+
output[0].to_f.should eq(timeline.timestamp)
|
133
|
+
output[1].to_f.should eq(timeline.volume)
|
134
|
+
output[2].to_f.should eq(timeline.duration)
|
135
|
+
output[3].to_f.should eq(timeline.hits)
|
136
|
+
output[4].to_f.should eq(timeline.timeouts)
|
137
|
+
|
138
|
+
File.delete('blitztest.csv')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
94
142
|
context "#print_sprint_result" do
|
95
143
|
def check_print_sprint_result args
|
96
144
|
result = mocked_sprint
|
@@ -98,6 +146,7 @@ describe Blitz::Command::Curl do
|
|
98
146
|
yield(obj, result)
|
99
147
|
obj.send(:print_sprint_result, args, result)
|
100
148
|
end
|
149
|
+
|
101
150
|
it "should not dump-header and verbose when they are not available" do
|
102
151
|
args = mocked_sprint_args
|
103
152
|
args.delete "verbose"
|
@@ -136,5 +185,5 @@ describe Blitz::Command::Curl do
|
|
136
185
|
}
|
137
186
|
end
|
138
187
|
end
|
139
|
-
|
140
|
-
end
|
188
|
+
|
189
|
+
end
|
data/spec/blitz/curl_spec.rb
CHANGED
@@ -238,6 +238,17 @@ describe Blitz::Curl do
|
|
238
238
|
hash['steps'][1]['request'] == 'POST'
|
239
239
|
end
|
240
240
|
end
|
241
|
+
|
242
|
+
context "output" do
|
243
|
+
it "should check that a output is given" do
|
244
|
+
lambda { Blitz::Curl.parse_cli %w[--output] }.should raise_error(MiniTest::Assertion, /missing value/)
|
245
|
+
end
|
246
|
+
|
247
|
+
it "should support export to output file" do
|
248
|
+
hash = Blitz::Curl.parse_cli %w[-o test.csv /faq]
|
249
|
+
hash['output'].should == 'test.csv'
|
250
|
+
end
|
251
|
+
end
|
241
252
|
end
|
242
253
|
|
243
254
|
describe "xargv" do
|
@@ -270,4 +281,4 @@ describe Blitz::Curl do
|
|
270
281
|
end
|
271
282
|
end
|
272
283
|
end
|
273
|
-
end
|
284
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blitz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.27
|
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: 2012-
|
12
|
+
date: 2012-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: couchrest
|