stella 0.5.1 → 0.5.3
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/README.txt +84 -24
- data/Rakefile +6 -1
- data/lib/stella.rb +5 -4
- data/lib/stella/adapter/ab.rb +31 -4
- data/lib/stella/adapter/base.rb +15 -1
- data/lib/stella/adapter/httperf.rb +35 -4
- data/lib/stella/adapter/siege.rb +51 -29
- data/lib/stella/cli.rb +45 -22
- data/lib/stella/cli/agents.rb +73 -0
- data/lib/stella/cli/language.rb +2 -0
- data/lib/stella/cli/localtest.rb +5 -0
- data/lib/stella/command/base.rb +1 -1
- data/lib/stella/command/localtest.rb +84 -68
- data/lib/stella/test/{summarybase.rb → base.rb} +3 -7
- data/lib/stella/test/definition.rb +10 -5
- data/lib/stella/test/{runsummary.rb → run/summary.rb} +4 -6
- data/lib/stella/test/{testsummary.rb → summary.rb} +27 -29
- data/lib/utils/escape.rb +302 -0
- data/lib/utils/mathutil.rb +36 -34
- data/support/text/en.yaml +7 -1
- metadata +8 -102
- data/doc/classes/Crypto.html +0 -248
- data/doc/classes/Crypto/Key.html +0 -308
- data/doc/classes/Enumerable.html +0 -309
- data/doc/classes/FileUtil.html +0 -310
- data/doc/classes/HTTPUtil.html +0 -530
- data/doc/classes/MathUtil.html +0 -210
- data/doc/classes/Stella.html +0 -238
- data/doc/classes/Stella/Adapter.html +0 -127
- data/doc/classes/Stella/Adapter/ApacheBench.html +0 -1076
- data/doc/classes/Stella/Adapter/Base.html +0 -432
- data/doc/classes/Stella/Adapter/CommandNotReady.html +0 -146
- data/doc/classes/Stella/Adapter/Httperf.html +0 -949
- data/doc/classes/Stella/Adapter/Siege.html +0 -1011
- data/doc/classes/Stella/CLI.html +0 -914
- data/doc/classes/Stella/CLI/Base.html +0 -186
- data/doc/classes/Stella/CLI/Language.html +0 -149
- data/doc/classes/Stella/CLI/LocalTest.html +0 -268
- data/doc/classes/Stella/Command.html +0 -111
- data/doc/classes/Stella/Command/Base.html +0 -335
- data/doc/classes/Stella/Config.html +0 -292
- data/doc/classes/Stella/InvalidArgument.html +0 -242
- data/doc/classes/Stella/LocalTest.html +0 -450
- data/doc/classes/Stella/Logger.html +0 -548
- data/doc/classes/Stella/Response.html +0 -846
- data/doc/classes/Stella/Storable.html +0 -928
- data/doc/classes/Stella/Test.html +0 -142
- data/doc/classes/Stella/Test/DaySummary.html +0 -249
- data/doc/classes/Stella/Test/Definition.html +0 -294
- data/doc/classes/Stella/Test/Definition/Rampup.html +0 -215
- data/doc/classes/Stella/Test/RunSummary.html +0 -315
- data/doc/classes/Stella/Test/SummaryBase.html +0 -286
- data/doc/classes/Stella/Test/TestSummary.html +0 -200
- data/doc/classes/Stella/Text.html +0 -581
- data/doc/classes/Stella/Text/Resource.html +0 -289
- data/doc/classes/Stella/UnavailableAdapter.html +0 -242
- data/doc/classes/Stella/UnknownValue.html +0 -242
- data/doc/classes/Stella/UnsupportedLanguage.html +0 -115
- data/doc/classes/Stella/Util.html +0 -348
- data/doc/classes/TextGraph.html +0 -460
- data/doc/classes/TimerUtil.html +0 -431
- data/doc/created.rid +0 -1
- data/doc/files/LICENSE_txt.html +0 -129
- data/doc/files/README_txt.html +0 -209
- data/doc/files/lib/stella/adapter/ab_rb.html +0 -101
- data/doc/files/lib/stella/adapter/base_rb.html +0 -101
- data/doc/files/lib/stella/adapter/httperf_rb.html +0 -101
- data/doc/files/lib/stella/adapter/siege_rb.html +0 -101
- data/doc/files/lib/stella/cli/base_rb.html +0 -101
- data/doc/files/lib/stella/cli/language_rb.html +0 -101
- data/doc/files/lib/stella/cli/localtest_rb.html +0 -101
- data/doc/files/lib/stella/cli_rb.html +0 -112
- data/doc/files/lib/stella/command/base_rb.html +0 -101
- data/doc/files/lib/stella/command/localtest_rb.html +0 -101
- data/doc/files/lib/stella/logger_rb.html +0 -101
- data/doc/files/lib/stella/response_rb.html +0 -101
- data/doc/files/lib/stella/storable_rb.html +0 -109
- data/doc/files/lib/stella/support_rb.html +0 -101
- data/doc/files/lib/stella/test/daysummary_rb.html +0 -101
- data/doc/files/lib/stella/test/definition_rb.html +0 -101
- data/doc/files/lib/stella/test/runsummary_rb.html +0 -101
- data/doc/files/lib/stella/test/summarybase_rb.html +0 -101
- data/doc/files/lib/stella/test/testsummary_rb.html +0 -108
- data/doc/files/lib/stella/text/resource_rb.html +0 -108
- data/doc/files/lib/stella/text_rb.html +0 -108
- data/doc/files/lib/stella_rb.html +0 -128
- data/doc/files/lib/utils/crypto-key_rb.html +0 -116
- data/doc/files/lib/utils/fileutil_rb.html +0 -108
- data/doc/files/lib/utils/httputil_rb.html +0 -110
- data/doc/files/lib/utils/mathutil_rb.html +0 -101
- data/doc/files/lib/utils/textgraph_rb.html +0 -138
- data/doc/files/lib/utils/timerutil_rb.html +0 -108
- data/doc/fr_class_index.html +0 -66
- data/doc/fr_file_index.html +0 -62
- data/doc/fr_method_index.html +0 -309
- data/doc/index.html +0 -24
- data/doc/rdoc-style.css +0 -208
- data/lib/stella/test/daysummary.rb +0 -93
- data/spec/base.rb +0 -26
- data/spec/shell_spec.rb +0 -12
data/README.txt
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
Stella
|
|
1
|
+
Stella - Your Performance Testing Friend
|
|
2
|
+
|
|
3
|
+
Release: 0.5.3-preview (2008-12-23)
|
|
4
|
+
|
|
5
|
+
This is a PREVIEW release. Don't trust and double verify!
|
|
2
6
|
|
|
3
|
-
Release: 0.5.1 (2008-12-23)
|
|
4
7
|
|
|
5
8
|
== Prerequisites
|
|
6
9
|
|
|
7
10
|
* Linux, *BSD, Solaris
|
|
8
11
|
* Ruby 1.8.x or 1.9.x
|
|
9
12
|
* Ruby Libraries
|
|
10
|
-
*
|
|
13
|
+
* fastthread
|
|
14
|
+
* mongrel
|
|
15
|
+
* rspec
|
|
16
|
+
* rdoc
|
|
17
|
+
|
|
11
18
|
* One of:
|
|
12
19
|
* Apache Bench
|
|
13
20
|
* Siege
|
|
@@ -17,58 +24,111 @@ Release: 0.5.1 (2008-12-23)
|
|
|
17
24
|
== Installation
|
|
18
25
|
|
|
19
26
|
Get it in one of the following ways:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
* gem install stella
|
|
27
|
+
* RubyForge: http://stella.rubyforge.org/
|
|
28
|
+
* gem install stella
|
|
23
29
|
|
|
24
30
|
Use ab, siege, and httperf like you normally would with the addition of stella at the beginning (examples are below).
|
|
25
31
|
|
|
32
|
+
=== Debian (and derivatives)
|
|
33
|
+
|
|
34
|
+
Debian and its derivative (Ubunutu) handling packing a bit differently (see: http://pkg-ruby-extras.alioth.debian.org/rubygems.html). There are a couple errors to watch out for during the installation. The solutions are below:
|
|
35
|
+
|
|
36
|
+
"no such file to load -- mkmf (LoadError)"
|
|
37
|
+
|
|
38
|
+
apt-get install ruby1.8-dev
|
|
39
|
+
|
|
40
|
+
"ERROR: RDoc documentation generator not installed!"
|
|
41
|
+
|
|
42
|
+
apt-get install rdoc
|
|
43
|
+
|
|
44
|
+
|
|
26
45
|
== Examples
|
|
27
46
|
|
|
28
|
-
|
|
47
|
+
Run Apache Bench with a warmup and rampup from 100 to 300 virtual users in increments of 25
|
|
48
|
+
|
|
29
49
|
stella --warmup=0.5 --rampup=25,300 ab -c 100 -n 10000 http://stellaaahhhh.com/search?term=trooper
|
|
30
50
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
51
|
+
|
|
52
|
+
Run Siege, repeat the test 5 times. Automatically creates a summary averages and standard deviations.
|
|
53
|
+
|
|
54
|
+
stella --agent=ff-3-osx --testruns=5 siege -c 100 -r 100 -b http://stellaaahhhh.com/search?term=flock+of+seagulls
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
Run Httperf like you normally would (but all the test data will be collected for you)
|
|
58
|
+
|
|
59
|
+
stella httperf --hog --client=0/1 --server=127.0.0.1 --port=5600 --uri=/ --rate=50 --num-conns=3000 --timeout=5
|
|
60
|
+
|
|
61
|
+
|
|
35
62
|
== Sample Output
|
|
36
63
|
|
|
37
|
-
$ stella -f csv -x 5 -w -m "httpd 2.2.9-prefork" siege -c
|
|
38
|
-
Writing test data to:
|
|
64
|
+
$ stella -f csv -x 5 -w 0.75 -r 25,125 -m "httpd 2.2.9-prefork" siege -c 75 -r 10 -b http://stella:5600/
|
|
65
|
+
Writing test data to: stella/testruns/2008-12-23/test-054
|
|
66
|
+
|
|
67
|
+
Warmup: 3750@37/1 100% 264.29/s 0.140s 0.024MB/s 0.340MB 14.000s .
|
|
39
68
|
|
|
40
|
-
|
|
69
|
+
-------------------------------------------------------------------
|
|
70
|
+
REQ@VU/s AVAIL REQ/s RTIME DATA/s DATA TIME
|
|
71
|
+
|
|
72
|
+
Run 01: 7500@75/1 100% 345.30/s 0.210s 0.032MB/s 0.690MB 21.720s
|
|
73
|
+
Run 02: 7500@75/1 100% 360.58/s 0.200s 0.033MB/s 0.690MB 20.800s
|
|
74
|
+
Run 03: 7500@75/1 100% 359.02/s 0.210s 0.033MB/s 0.690MB 20.890s
|
|
75
|
+
-------------------------------------------------------------------
|
|
76
|
+
Total: 22500@73 100% 354.97/s 0.207s 0.033MB/s 2.070MB 63.410s
|
|
77
|
+
Std Dev: 6.86/s 0.005s 0.001MB/s 0.414s
|
|
78
|
+
|
|
79
|
+
Run 04: 10000@100/1 100% 384.47/s 0.260s 0.035MB/s 0.920MB 26.010s
|
|
80
|
+
Run 05: 10000@100/1 100% 385.06/s 0.260s 0.035MB/s 0.920MB 25.970s
|
|
81
|
+
Run 06: 10000@100/1 100% 380.95/s 0.260s 0.035MB/s 0.920MB 26.250s
|
|
82
|
+
-------------------------------------------------------------------
|
|
83
|
+
Total: 30000@98 100% 383.49/s 0.260s 0.035MB/s 2.760MB 78.230s
|
|
84
|
+
Std Dev: 1.81/s 0.000s 0.000MB/s 0.124s
|
|
85
|
+
|
|
86
|
+
Run 07: 12500@125/1 100% 397.20/s 0.310s 0.036MB/s 1.140MB 31.470s
|
|
87
|
+
Run 08: 12500@125/1 100% 397.08/s 0.310s 0.036MB/s 1.140MB 31.480s
|
|
88
|
+
Run 09: 12500@125/1 100% 397.58/s 0.310s 0.036MB/s 1.140MB 31.440s
|
|
89
|
+
-------------------------------------------------------------------
|
|
90
|
+
Total: 37500@123 100% 397.29/s 0.310s 0.036MB/s 3.420MB 94.390s
|
|
91
|
+
Std Dev: 0.21/s 0.000s 0.000MB/s 0.017s
|
|
41
92
|
|
|
42
|
-
Run 01: 1250@125 3.4800s 359.20/s 0.3200s (100.00%)
|
|
43
|
-
Run 02: 1250@125 3.4400s 363.37/s 0.3200s (100.00%)
|
|
44
|
-
Run 03: 1250@125 5.0000s 250.00/s 0.4700s (100.00%)
|
|
45
|
-
Run 04: 1250@125 3.3300s 375.38/s 0.3100s (100.00%)
|
|
46
|
-
Run 05: 1250@125 3.4100s 366.57/s 0.3100s (100.00%)
|
|
47
93
|
-------------------------------------------------------------------
|
|
48
|
-
|
|
49
|
-
|
|
94
|
+
Total: 90000@98 100% 378.58/s 0.259s 0.035MB/s 8.250MB 236.030s
|
|
95
|
+
Std Dev: 18.09/s 0.042s 0.002MB/s 4.225s
|
|
96
|
+
|
|
50
97
|
|
|
51
98
|
All test data is collected under ./stella (this can be changed with the parameter --datapath):
|
|
99
|
+
|
|
52
100
|
$ ls -l ./stella/testruns/2008-12-23/
|
|
53
|
-
test-001 test-002 test-003 test-004 test-005 test-006
|
|
101
|
+
test-001 test-002 test-003 test-004 test-005 test-006 ... test-054
|
|
54
102
|
|
|
103
|
+
|
|
55
104
|
A symbolic link points to the most recent test:
|
|
105
|
+
|
|
56
106
|
$ ls -l ./stella/latest/
|
|
57
107
|
ID.txt MESSAGE.txt SUMMARY.csv run01 run02 run03 run04 run05 warmup
|
|
58
108
|
|
|
109
|
+
|
|
59
110
|
Each run directory contains all associated data, including the command and configuration
|
|
111
|
+
|
|
60
112
|
$ ls -l ./stella/latest/run01/
|
|
61
113
|
COMMAND.txt STDOUT.txt siege.log STDERR.txt SUMMARY.csv siegerc
|
|
62
114
|
|
|
63
115
|
|
|
116
|
+
== Known Issues
|
|
117
|
+
|
|
118
|
+
* The output for the REQ@VU/s columns is a work in progress. It's not aligned across tools and it will likely change in the next release.
|
|
119
|
+
* The summary data has not been audited. Don't trust and double verify!
|
|
120
|
+
* httperf is functional but needs a lot more testing (most dev was done with ab and siege).
|
|
121
|
+
* The Ruby API has not been finalized. It's functional but there's no example because it is subject to change.
|
|
122
|
+
* There are no specs.
|
|
64
123
|
|
|
65
124
|
== Report an issue
|
|
66
125
|
|
|
67
126
|
Email issues and bugs to stella@solutious.com
|
|
68
127
|
|
|
69
|
-
== More Information
|
|
70
128
|
|
|
71
|
-
|
|
129
|
+
== Even More Information
|
|
130
|
+
|
|
131
|
+
http://www.youtube.com/watch?v=wmq-JDonTpc
|
|
72
132
|
|
|
73
133
|
== License
|
|
74
134
|
|
data/Rakefile
CHANGED
|
@@ -31,7 +31,12 @@ require 'rake/rdoctask'
|
|
|
31
31
|
require 'fileutils'
|
|
32
32
|
include FileUtils
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
STELLA_HOME = File.expand_path(File.join(File.dirname(__FILE__)))
|
|
35
|
+
$: << File.join(STELLA_HOME, 'lib')
|
|
36
|
+
|
|
37
|
+
require 'stella'
|
|
38
|
+
version = Stella::VERSION.to_s
|
|
39
|
+
|
|
35
40
|
name = "stella"
|
|
36
41
|
|
|
37
42
|
spec = Gem::Specification.new do |s|
|
data/lib/stella.rb
CHANGED
|
@@ -10,6 +10,7 @@ require 'utils/httputil'
|
|
|
10
10
|
require 'utils/crypto-key'
|
|
11
11
|
require 'utils/fileutil'
|
|
12
12
|
require 'utils/mathutil'
|
|
13
|
+
require 'utils/escape'
|
|
13
14
|
|
|
14
15
|
# Common dependencies
|
|
15
16
|
require 'stella/support'
|
|
@@ -21,8 +22,8 @@ require 'stella/text'
|
|
|
21
22
|
require 'stella/logger'
|
|
22
23
|
require 'stella/response'
|
|
23
24
|
require 'stella/test/definition'
|
|
24
|
-
require 'stella/test/
|
|
25
|
-
require 'stella/test/
|
|
25
|
+
require 'stella/test/run/summary'
|
|
26
|
+
require 'stella/test/summary'
|
|
26
27
|
|
|
27
28
|
# Commands
|
|
28
29
|
require 'stella/command/base'
|
|
@@ -38,13 +39,13 @@ require 'stella/adapter/httperf'
|
|
|
38
39
|
# A friend in performance testing.
|
|
39
40
|
#
|
|
40
41
|
module Stella
|
|
41
|
-
LOGGER = Stella::Logger.new(:debug=>
|
|
42
|
+
LOGGER = Stella::Logger.new(:debug=>false)
|
|
42
43
|
TEXT = Stella::Text.new('en')
|
|
43
44
|
|
|
44
45
|
module VERSION #:nodoc:
|
|
45
46
|
MAJOR = 0.freeze unless defined? MAJOR
|
|
46
47
|
MINOR = 5.freeze unless defined? MINOR
|
|
47
|
-
TINY =
|
|
48
|
+
TINY = 3.freeze unless defined? TINY
|
|
48
49
|
def self.to_s
|
|
49
50
|
[MAJOR, MINOR, TINY].join('.')
|
|
50
51
|
end
|
data/lib/stella/adapter/ab.rb
CHANGED
|
@@ -86,9 +86,9 @@ module Stella
|
|
|
86
86
|
# because it applies the load factor.
|
|
87
87
|
value = self.send(canon)
|
|
88
88
|
if (value.is_a? Array)
|
|
89
|
-
value.each { |el| command << "-#{
|
|
89
|
+
value.each { |el| command << "-#{canon} #{EscapeUtil.shell_single_word(el.to_s)} " }
|
|
90
90
|
else
|
|
91
|
-
command << "-#{canon}
|
|
91
|
+
command << "-#{canon} #{EscapeUtil.shell_single_word(value.to_s)} "
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
end
|
|
@@ -168,7 +168,19 @@ module Stella
|
|
|
168
168
|
|
|
169
169
|
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
def add_header(name, value)
|
|
172
|
+
@H ||= []
|
|
173
|
+
@H << "#{name}: #{value}"
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def user_agent=(list=[])
|
|
177
|
+
return unless list && !list.empty?
|
|
178
|
+
list = list.to_ary
|
|
179
|
+
list.each do |agent|
|
|
180
|
+
add_header("User-Agent", agent)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
172
184
|
def vusers
|
|
173
185
|
c || 0
|
|
174
186
|
end
|
|
@@ -240,7 +252,22 @@ module Stella
|
|
|
240
252
|
raw[n.to_sym] = v.to_f unless raw.has_key? n.to_sym
|
|
241
253
|
}
|
|
242
254
|
|
|
243
|
-
|
|
255
|
+
# Document Path: /
|
|
256
|
+
# Document Length: 96 bytes
|
|
257
|
+
#
|
|
258
|
+
# Concurrency Level: 75
|
|
259
|
+
# Time taken for tests: 2.001 seconds
|
|
260
|
+
# Complete requests: 750
|
|
261
|
+
# Failed requests: 0
|
|
262
|
+
# Write errors: 0
|
|
263
|
+
# Total transferred: 174000 bytes
|
|
264
|
+
# HTML transferred: 72000 bytes
|
|
265
|
+
# Requests per second: 374.74 [#/sec] (mean)
|
|
266
|
+
# Time per request: 200.138 [ms] (mean)
|
|
267
|
+
# Time per request: 2.669 [ms] (mean, across all concurrent requests)
|
|
268
|
+
# Transfer rate: 84.90 [Kbytes/sec] received
|
|
269
|
+
|
|
270
|
+
stats = Stella::Test::Run::Summary.new
|
|
244
271
|
|
|
245
272
|
unless raw.empty? || !raw.has_key?(:time_taken_for_tests)
|
|
246
273
|
|
data/lib/stella/adapter/base.rb
CHANGED
|
@@ -60,13 +60,27 @@ module Stella::Adapter
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def name
|
|
63
|
-
@
|
|
63
|
+
@name
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def rate
|
|
67
|
+
1
|
|
68
|
+
end
|
|
69
|
+
def vuser_rate
|
|
70
|
+
"#{vusers}/#{rate}"
|
|
64
71
|
end
|
|
65
72
|
|
|
66
73
|
def command
|
|
67
74
|
raise Stella::TEXT.msg(:error_class_must_override, 'command')
|
|
68
75
|
end
|
|
69
76
|
|
|
77
|
+
def add_header
|
|
78
|
+
raise Stella::TEXT.msg(:error_class_must_override, 'add_header')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def user_agent=
|
|
82
|
+
raise Stella::TEXT.msg(:error_class_must_override, 'user_agent=')
|
|
83
|
+
end
|
|
70
84
|
|
|
71
85
|
end
|
|
72
86
|
end
|
|
@@ -55,9 +55,9 @@ module Stella
|
|
|
55
55
|
# because it applies the load factor.
|
|
56
56
|
value = self.send(canon)
|
|
57
57
|
if (value.is_a? Array)
|
|
58
|
-
value.each { |el| command << "--#{canon.tr('_', '-')}
|
|
58
|
+
value.each { |el| command << "--#{canon.tr('_', '-')} #{EscapeUtil.shell_single_word(el.to_s)} " }
|
|
59
59
|
else
|
|
60
|
-
command << "--#{canon.tr('_', '-')}
|
|
60
|
+
command << "--#{canon.tr('_', '-')} #{EscapeUtil.shell_single_word(value.to_s)} "
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
end
|
|
@@ -102,7 +102,7 @@ module Stella
|
|
|
102
102
|
|
|
103
103
|
opts.on('--add-header=S', String) do |v| @add_header ||= []; @add_header << v; end
|
|
104
104
|
opts.on('--burst-length=N', Integer) do |v| @burst_length = v end
|
|
105
|
-
opts.on('--client=
|
|
105
|
+
opts.on('--client=S', String) do |v| @client = v end
|
|
106
106
|
opts.on('-d N', '--debug=N', Integer) do |v| @debug ||= 0; @debug = v end
|
|
107
107
|
opts.on('--failure-status=N', Integer) do |v| @failure_status = v end
|
|
108
108
|
|
|
@@ -161,6 +161,22 @@ module Stella
|
|
|
161
161
|
@name && !instance_variables.empty?
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
+
def add_header(name=false, value=false)
|
|
165
|
+
# This is a hack since we have an instance variable called add_header.
|
|
166
|
+
# I figure this is the best of two evils because I'd rather keep the
|
|
167
|
+
# instance variable naming consistent.
|
|
168
|
+
return @add_header if !name && !value
|
|
169
|
+
@add_header ||= []
|
|
170
|
+
@add_header << "#{name}: #{value}"
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def user_agent=(list=[])
|
|
174
|
+
return unless list && !list.empty?
|
|
175
|
+
list = list.to_ary
|
|
176
|
+
list.each do |agent|
|
|
177
|
+
add_header("User-Agent", agent)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
164
180
|
def vusers
|
|
165
181
|
@rate
|
|
166
182
|
end
|
|
@@ -176,6 +192,21 @@ module Stella
|
|
|
176
192
|
def vuser_requests
|
|
177
193
|
0
|
|
178
194
|
end
|
|
195
|
+
def wsess
|
|
196
|
+
@wsess.join(',')
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def wset
|
|
200
|
+
@wset.join(',')
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def wsesslog
|
|
205
|
+
@wsesslog.join(',')
|
|
206
|
+
end
|
|
207
|
+
def wlog
|
|
208
|
+
@wlog.join(',')
|
|
209
|
+
end
|
|
179
210
|
|
|
180
211
|
#def concurrent
|
|
181
212
|
# (@concurrent * @load_factor).to_i
|
|
@@ -235,7 +266,7 @@ module Stella
|
|
|
235
266
|
return unless stats_file
|
|
236
267
|
|
|
237
268
|
raw = stats_file.readlines.join
|
|
238
|
-
stats = Stella::Test::
|
|
269
|
+
stats = Stella::Test::Run::Summary.new
|
|
239
270
|
|
|
240
271
|
raw.scan(/Request rate: (\d+?\.\d+?) req.s .(\d+?\.\d+?) ms.req./) do |rate,time|
|
|
241
272
|
stats.transaction_rate = rate.to_f
|
data/lib/stella/adapter/siege.rb
CHANGED
|
@@ -95,9 +95,9 @@ module Stella
|
|
|
95
95
|
# because it applies the load factor.
|
|
96
96
|
value = self.send(canon)
|
|
97
97
|
if (value.is_a? Array)
|
|
98
|
-
value.each { |el| command << "--#{
|
|
98
|
+
value.each { |el| command << "--#{canon.tr('_', '-')} #{EscapeUtil.shell_single_word(el.to_s)} " }
|
|
99
99
|
else
|
|
100
|
-
command << "--#{canon.tr('_', '-')}
|
|
100
|
+
command << "--#{canon.tr('_', '-')} #{EscapeUtil.shell_single_word(value.to_s)} "
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
end
|
|
@@ -118,24 +118,24 @@ module Stella
|
|
|
118
118
|
def process_options(arguments)
|
|
119
119
|
options = OpenStruct.new
|
|
120
120
|
opts = OptionParser.new
|
|
121
|
-
opts.on('-V', '--version') do |v|
|
|
122
|
-
opts.on('-h', '--help') do |v|
|
|
123
|
-
opts.on('-C', '--config') do |v|
|
|
124
|
-
opts.on('-v', '--verbose') do |v|
|
|
125
|
-
opts.on('-g', '--get') do |v|
|
|
126
|
-
opts.on('-l', '--log') do |v|
|
|
127
|
-
opts.on('-m S', '--mark=S', String) do |v|
|
|
128
|
-
opts.on('-d N', '--delay=N', Float) do |v|
|
|
129
|
-
opts.on('-H S', '--header=S', String) do |v|
|
|
121
|
+
opts.on('-V', '--version') do |v| @version = v end
|
|
122
|
+
opts.on('-h', '--help') do |v| @help = v end
|
|
123
|
+
opts.on('-C', '--config') do |v| @config = v end
|
|
124
|
+
opts.on('-v', '--verbose') do |v| @verbose = v end
|
|
125
|
+
opts.on('-g', '--get') do |v| @get = v end
|
|
126
|
+
opts.on('-l', '--log') do |v| @log = v end
|
|
127
|
+
opts.on('-m S', '--mark=S', String) do |v| @mark = v end
|
|
128
|
+
opts.on('-d N', '--delay=N', Float) do |v| @delay = v end
|
|
129
|
+
opts.on('-H S', '--header=S', String) do |v| @header ||= []; @header << v end
|
|
130
130
|
|
|
131
|
-
opts.on('-r N', '--reps=N', Integer) do |v|
|
|
132
|
-
opts.on('-c N', '--concurrent=N', Integer) do |v|
|
|
133
|
-
opts.on('-R S', '--rc=S', String) do |v|
|
|
134
|
-
opts.on('-f S', '--file=S', String) do |v|
|
|
135
|
-
opts.on('-t S', '--time=S', String) do |v|
|
|
136
|
-
opts.on('-b', '--benchmark') do |v|
|
|
137
|
-
opts.on('-i', '--internet') do |v|
|
|
138
|
-
opts.on('-A S', '--user-agent=S', String) do |v|
|
|
131
|
+
opts.on('-r N', '--reps=N', Integer) do |v| @reps = v.to_i end
|
|
132
|
+
opts.on('-c N', '--concurrent=N', Integer) do |v| @concurrent = v.to_i end
|
|
133
|
+
opts.on('-R S', '--rc=S', String) do |v| @rc = v end
|
|
134
|
+
opts.on('-f S', '--file=S', String) do |v| @file = v end
|
|
135
|
+
opts.on('-t S', '--time=S', String) do |v| @time = v end
|
|
136
|
+
opts.on('-b', '--benchmark') do |v| @benchmark = true; end
|
|
137
|
+
opts.on('-i', '--internet') do |v| @internet = true; end
|
|
138
|
+
opts.on('-A S', '--user-agent=S', String) do |v| @user_agent ||= []; @user_agent << v end
|
|
139
139
|
|
|
140
140
|
raise "You cannot select both --internet and --benchmark" if options.internet && options.benchmark
|
|
141
141
|
|
|
@@ -150,7 +150,19 @@ module Stella
|
|
|
150
150
|
raise InvalidArgument.new(badarg)
|
|
151
151
|
end
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
|
|
154
|
+
def add_header(name, value)
|
|
155
|
+
@header ||= []
|
|
156
|
+
@header << "#{name}: #{value}"
|
|
157
|
+
end
|
|
158
|
+
def user_agent=(list=[])
|
|
159
|
+
return unless list && !list.empty?
|
|
160
|
+
list = list.to_ary
|
|
161
|
+
@user_agent ||= []
|
|
162
|
+
@user_agent << list
|
|
163
|
+
@user_agent.flatten
|
|
164
|
+
end
|
|
165
|
+
|
|
154
166
|
def vusers
|
|
155
167
|
concurrent || 0
|
|
156
168
|
end
|
|
@@ -272,23 +284,33 @@ module Stella
|
|
|
272
284
|
raw[n.to_sym] = v.to_f
|
|
273
285
|
}
|
|
274
286
|
|
|
275
|
-
stats = Stella::Test::
|
|
276
|
-
|
|
287
|
+
stats = Stella::Test::Run::Summary.new
|
|
288
|
+
|
|
289
|
+
# Transactions: 750 hits
|
|
290
|
+
# Availability: 100.00 %
|
|
291
|
+
# Elapsed time: 2.33 secs
|
|
292
|
+
# Data transferred: 0.07 MB
|
|
293
|
+
# Response time: 0.21 secs
|
|
294
|
+
# Transaction rate: 321.89 trans/sec
|
|
295
|
+
# Throughput: 0.03 MB/sec
|
|
296
|
+
# Concurrency: 67.49
|
|
297
|
+
# Successful transactions: 750
|
|
298
|
+
# Failed transactions: 0
|
|
299
|
+
# Longest transaction: 0.33
|
|
300
|
+
# Shortest transaction: 0.10
|
|
301
|
+
|
|
277
302
|
stats.vusers = raw[:concurrency]
|
|
278
303
|
stats.data_transferred = raw[:data_transferred]
|
|
279
|
-
|
|
280
|
-
|
|
281
304
|
stats.elapsed_time = raw[:elapsed_time]
|
|
282
305
|
stats.response_time = raw[:response_time]
|
|
283
|
-
|
|
284
|
-
#stats.shortest_transaction = raw[:shortest_transaction]
|
|
285
|
-
#stats.longest_transaction = raw[:longest_transaction]
|
|
286
|
-
|
|
287
306
|
stats.transactions = raw[:transactions].to_i
|
|
288
307
|
stats.transaction_rate = raw[:transaction_rate]
|
|
289
308
|
stats.failed = raw[:failed_transactions].to_i
|
|
290
309
|
stats.successful = raw[:successful_transactions].to_i
|
|
291
|
-
|
|
310
|
+
|
|
311
|
+
#stats.shortest_transaction = raw[:shortest_transaction]
|
|
312
|
+
#stats.longest_transaction = raw[:longest_transaction]
|
|
313
|
+
|
|
292
314
|
stats
|
|
293
315
|
end
|
|
294
316
|
|