blitz 0.1.26 → 0.1.27
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/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
|