stella 0.7.0.015 → 0.7.0.017
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +3 -3
- data/README.rdoc +2 -6
- data/Rudyfile +3 -3
- data/bin/stella +38 -26
- data/examples/cookies/plan.rb +9 -1
- data/examples/csvdata/plan.rb +27 -0
- data/examples/csvdata/search_terms.csv +14 -0
- data/examples/essentials/plan.rb +6 -6
- data/examples/essentials/{search_terms.csv → search_terms.txt} +0 -0
- data/examples/exceptions/plan.rb +9 -2
- data/lib/stella.rb +73 -48
- data/lib/stella/cli.rb +9 -23
- data/lib/stella/client.rb +10 -9
- data/lib/stella/client/container.rb +11 -1
- data/lib/stella/data.rb +114 -61
- data/lib/stella/data/http.rb +1 -1
- data/lib/stella/data/http/request.rb +7 -7
- data/lib/stella/engine.rb +36 -11
- data/lib/stella/engine/functional.rb +9 -8
- data/lib/stella/engine/load.rb +311 -14
- data/lib/stella/exceptions.rb +7 -2
- data/lib/stella/mixins.rb +4 -1
- data/lib/stella/mixins/numeric.rb +11 -10
- data/lib/stella/mixins/string.rb +12 -0
- data/lib/stella/mixins/time.rb +75 -0
- data/lib/stella/testplan.rb +15 -18
- data/lib/stella/testplan/usecase.rb +16 -5
- data/lib/stella/utils.rb +7 -5
- data/lib/stella/version.rb +1 -1
- data/stella.gemspec +11 -7
- data/tryouts/01_numeric_mixins_tryouts.rb +40 -0
- data/tryouts/12_digest_tryouts.rb +42 -0
- metadata +12 -17
- data/lib/stella/engine/stress.rb +0 -293
data/CHANGES.txt
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
STELLA, CHANGES
|
2
2
|
|
3
3
|
|
4
|
-
#### 0.7.0 (2009-
|
4
|
+
#### 0.7.0 (2009-10-??) ###############################
|
5
5
|
|
6
|
-
NOTE: Complete rewrite
|
6
|
+
NOTE: Complete rewrite. Features include:
|
7
7
|
|
8
8
|
* New internal architecture.
|
9
9
|
* Improved stability and output for high thread loads.
|
10
|
-
* Updated configuration
|
10
|
+
* Updated configuration syntax
|
11
11
|
* Granular reporting via Benelux
|
12
12
|
|
13
13
|
|
data/README.rdoc
CHANGED
@@ -2,9 +2,6 @@
|
|
2
2
|
|
3
3
|
<b>Perform load tests on your web applications with beauty and brute strength.</b>
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
5
|
== Features
|
9
6
|
|
10
7
|
* Realistic load simulation
|
@@ -27,9 +24,8 @@ This is an early preview of Stella. The following features are still under devel
|
|
27
24
|
# by running a single user functional test.
|
28
25
|
$ stella verify -p examples/basic/plan.rb http://stellaaahhhh.com/
|
29
26
|
|
30
|
-
#
|
31
|
-
|
32
|
-
$ stella load -p examples/basic/plan.rb http://stellaaahhhh.com/
|
27
|
+
# Generate requests using the same test plan.
|
28
|
+
$ stella generate -p examples/basic/plan.rb http://stellaaahhhh.com/
|
33
29
|
|
34
30
|
|
35
31
|
== Test Plan Example
|
data/Rudyfile
CHANGED
@@ -68,10 +68,10 @@ routines do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
# rudy -v -r gen
|
72
|
-
|
71
|
+
# rudy -v -r gen generate ip-10-251-27-245.ec2.internal:3114
|
72
|
+
generate do
|
73
73
|
remote do |arg|
|
74
|
-
stella :v, '
|
74
|
+
stella :v, 'generate', :c, 50, :r, 4, "#{arg.first}"
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
data/bin/stella
CHANGED
@@ -36,8 +36,9 @@ class Stella::CLI::Definition
|
|
36
36
|
# ---------------------------------------- STELLA GLOBALS --------
|
37
37
|
# ------------------------------------------------------------------
|
38
38
|
|
39
|
-
global :A, :apikey, String, "API Key"
|
40
|
-
global :S, :secret, String, "Secret Key"
|
39
|
+
#global :A, :apikey, String, "API Key"
|
40
|
+
#global :S, :secret, String, "Secret Key"
|
41
|
+
global :p, :pause, Integer, "Seconds to pause before starting test"
|
41
42
|
global :n, :nocolor, "Disable output colors" do
|
42
43
|
String.disable_color
|
43
44
|
end
|
@@ -63,43 +64,45 @@ class Stella::CLI::Definition
|
|
63
64
|
usage "stella example"
|
64
65
|
command :example => Stella::CLI
|
65
66
|
|
66
|
-
about "Preview
|
67
|
+
about "Preview a test plan"
|
67
68
|
usage "stella preview [-p path/2/testplan.rb] "
|
69
|
+
option :c, :clients, Integer, "Maximum number of virtual clients (ignored)"
|
70
|
+
option :r, :repetitions, Integer, "Number of times to repeat the testplan (ignored)"
|
71
|
+
option :d, :duration, String, "Max duration to run test (ignored)"
|
72
|
+
option :W, :nowait, "Ignore wait times (ignored)"
|
73
|
+
option :w, :wait, Float, "Wait time (in seconds) between client requests (ignored if testplan supplied)"
|
68
74
|
option :p, :testplan, String, "Path to testplan"
|
69
75
|
command :preview => Stella::CLI
|
70
76
|
|
71
|
-
about "
|
72
|
-
usage "stella verify
|
73
|
-
usage "
|
77
|
+
about "Verify a test plan"
|
78
|
+
usage "stella verify [-p path/2/testplan.rb] URI"
|
79
|
+
usage "e.g."
|
80
|
+
usage " $stella verify -p path/2/testplan.rb http://stellaaahhhh.com/"
|
81
|
+
option :c, :clients, Integer, "Maximum number of virtual clients (ignored)"
|
82
|
+
option :r, :repetitions, Integer, "Number of times to repeat the testplan (ignored)"
|
83
|
+
option :d, :duration, String, "Max duration to run test (ignored)"
|
74
84
|
option :W, :nowait, "Ignore wait times"
|
75
85
|
option :w, :wait, Float, "Wait time (in seconds) between client requests (ignored if testplan supplied)"
|
76
86
|
option :p, :testplan, String, "Path to testplan"
|
77
87
|
command :verify => Stella::CLI
|
78
88
|
|
79
|
-
about "
|
80
|
-
usage "stella
|
81
|
-
usage "stella load
|
82
|
-
usage "stella
|
83
|
-
usage "
|
84
|
-
|
89
|
+
about "Generate requests"
|
90
|
+
usage "stella generate [options] URI"
|
91
|
+
#usage "stella load [options] URI"
|
92
|
+
#usage "stella stress [options] URI"
|
93
|
+
usage "e.g. "
|
94
|
+
usage " $ stella generate -p path/2/testplan.rb -u 100 -r 50 http://stellaaahhhh.com:3114/"
|
95
|
+
#usage " $ stella stress --clients=50 --repetitions=20 http://stellaaahhhh.com/"
|
96
|
+
option :c, :clients, Integer, "Maximum number of virtual clients"
|
85
97
|
option :r, :repetitions, Integer, "Number of times to repeat the testplan (per vclient)"
|
86
98
|
option :d, :duration, String, "Max duration to run test"
|
87
99
|
option :W, :nowait, "Ignore wait times"
|
88
100
|
option :w, :wait, Float, "Wait time (in seconds) between client requests (ignored if testplan supplied)"
|
89
101
|
option :p, :testplan, String, "Path to testplan"
|
90
|
-
command :
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
usage "stella stress http://stellaaahhhh.com:3114/"
|
95
|
-
usage "stella stress --clients=10 --repetitions=2 http://stellaaahhhh.com/"
|
96
|
-
usage "stella stress -p path/2/testplan.rb -u 100 -r 5 http://stellaaahhhh.com/"
|
97
|
-
option :c, :clients, Integer, "Number of virtual clients"
|
98
|
-
option :r, :repetitions, Integer, "Number of times to repeat the testplan (per vclient)"
|
99
|
-
option :d, :duration, String, "Max duration to run test"
|
100
|
-
option :p, :testplan, String, "Path to testplan"
|
101
|
-
command :stress => Stella::CLI
|
102
|
-
|
102
|
+
command :generate => Stella::CLI
|
103
|
+
# command_alias :generate, :load
|
104
|
+
# command_alias :generate, :stress
|
105
|
+
|
103
106
|
about "Initialize Stella configuration"
|
104
107
|
command :init do
|
105
108
|
Stella::Config.init
|
@@ -117,8 +120,15 @@ class Stella::CLI::Definition
|
|
117
120
|
# ------------------------------------------------------------------
|
118
121
|
|
119
122
|
before do |obj|
|
123
|
+
#puts $$
|
120
124
|
@start = Time.now
|
121
|
-
|
125
|
+
if obj.global.pause
|
126
|
+
obj.global.pause.to_i.times do |i|
|
127
|
+
print "Waiting for %s" % [(obj.global.pause-i)]
|
128
|
+
sleep 1
|
129
|
+
print "\r%30s\r" % '' # clear line
|
130
|
+
end
|
131
|
+
end
|
122
132
|
end
|
123
133
|
|
124
134
|
after do |obj|
|
@@ -141,6 +151,8 @@ rescue Drydock::ArgError, Drydock::OptError => ex
|
|
141
151
|
STDERR.puts ex.usage
|
142
152
|
rescue Drydock::InvalidArgument => ex
|
143
153
|
STDERR.puts ex.message
|
154
|
+
rescue Drydock::UnknownCommand => ex
|
155
|
+
STDERR.puts "Unknown command: %s" % ex.name
|
144
156
|
rescue Stella::Error => ex
|
145
157
|
STDERR.puts ex.message
|
146
158
|
STDERR.puts ex.backtrace if Stella.loglev > 2 || Drydock.debug?
|
data/examples/cookies/plan.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# Stella Test Plan - Cookies (2009-10-08)
|
2
|
+
#
|
3
|
+
# TO BE DOCUMENTED.
|
4
|
+
#
|
5
|
+
# If you're reading this, remind me!
|
6
|
+
#
|
1
7
|
desc "Maintain Your Cookies"
|
2
8
|
|
3
9
|
usecase 65, "Simple search" do
|
@@ -15,4 +21,6 @@ usecase 65, "Simple search" do
|
|
15
21
|
end
|
16
22
|
end
|
17
23
|
|
18
|
-
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# c88c5e4e8c72e305928c8e512ca1e26baf271544
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Stella Test Plan - Reading CSV Data (2009-10-08)
|
2
|
+
#
|
3
|
+
# TO BE DOCUMENTED.
|
4
|
+
#
|
5
|
+
# If you're reading this, remind me!
|
6
|
+
#
|
7
|
+
|
8
|
+
usecase "Reading CSV Data" do
|
9
|
+
resource :search_terms, csv('search_terms.csv')
|
10
|
+
|
11
|
+
get "/search", "Search (random)" do
|
12
|
+
param :what => random(:search_terms, 0)
|
13
|
+
param :where => random(:search_terms, 1)
|
14
|
+
end
|
15
|
+
|
16
|
+
get "/search", "Search (sequential #1)" do
|
17
|
+
param :what => sequential(:search_terms, 0)
|
18
|
+
param :where => sequential(:search_terms, 1)
|
19
|
+
end
|
20
|
+
|
21
|
+
get "/search", "Search (sequential #2)" do
|
22
|
+
param :what => sequential(:search_terms, 0)
|
23
|
+
param :where => sequential(:search_terms, 1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# d93df136283f3867f462266a98675ce0b2f51b08
|
data/examples/essentials/plan.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Stella -
|
1
|
+
# Stella Test Plan - Essentials (2009-10-08)
|
2
2
|
#
|
3
3
|
#
|
4
4
|
# 1. INTRODUCTION
|
@@ -57,11 +57,11 @@
|
|
57
57
|
# The "verify" command executes the plan with a
|
58
58
|
# single user and provides more detailed output.
|
59
59
|
#
|
60
|
-
#
|
60
|
+
# And this is how you generate load:
|
61
61
|
#
|
62
|
-
# $ stella
|
62
|
+
# $ stella generate -c 50 -r 10 -p examples/essentials/plan.rb http://127.0.0.1:3114/
|
63
63
|
#
|
64
|
-
# where "c" is the number of concurrent
|
64
|
+
# where "c" is the number of concurrent clients,
|
65
65
|
# "r" is the number of times to repeat the plan.
|
66
66
|
#
|
67
67
|
#
|
@@ -89,7 +89,7 @@ usecase 65, "Simple search" do
|
|
89
89
|
# into an array called :search_terms. The
|
90
90
|
# colon is Ruby's way of defining a symbol.
|
91
91
|
#
|
92
|
-
resource :search_terms, list('search_terms.
|
92
|
+
resource :search_terms, list('search_terms.txt')
|
93
93
|
|
94
94
|
# Requests are defined with one of the
|
95
95
|
# following methods: get, post, head, delete.
|
@@ -244,4 +244,4 @@ usecase 10, "Self-serve API" do
|
|
244
244
|
|
245
245
|
end
|
246
246
|
|
247
|
-
#
|
247
|
+
# 80661e5f4c731ed905b01fdcdb52896629c7dd1e
|
File without changes
|
data/examples/exceptions/plan.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
|
1
|
+
# Stella Test Plan - Exception Handling (2009-10-08)
|
2
|
+
#
|
3
|
+
# TO BE DOCUMENTED.
|
4
|
+
#
|
5
|
+
# If you're reading this, remind me!
|
6
|
+
#
|
2
7
|
|
3
8
|
usecase "Exception Handling" do
|
4
9
|
|
@@ -10,4 +15,6 @@ usecase "Exception Handling" do
|
|
10
15
|
end
|
11
16
|
end
|
12
17
|
|
13
|
-
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# 0f354b3579e6c5b5b3f303aabb2ac3aa5b11096a
|
data/lib/stella.rb
CHANGED
@@ -1,59 +1,79 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
STELLA_LIB_HOME = File.expand_path File.dirname(__FILE__) unless defined?(STELLA_LIB_HOME)
|
3
|
+
|
4
|
+
%w{attic hexoid storable sysinfo gibbler benelux}.each do |dir|
|
5
|
+
$:.unshift File.join(STELLA_LIB_HOME, '..', '..', dir, 'lib')
|
6
|
+
end
|
7
|
+
|
8
|
+
autoload :SysInfo, 'sysinfo'
|
9
|
+
autoload :Drydock, 'drydock'
|
10
|
+
autoload :URI, 'uri'
|
11
|
+
autoload :OpenStruct, 'ostruct'
|
12
|
+
autoload :Storable, 'storable'
|
13
|
+
autoload :Gibbler, 'gibbler/aliases'
|
14
|
+
autoload :Attic, 'attic'
|
15
|
+
|
16
|
+
require 'benelux'
|
3
17
|
require 'threadify'
|
18
|
+
require 'tracer'
|
19
|
+
|
20
|
+
|
4
21
|
|
5
22
|
module Stella
|
6
23
|
extend self
|
7
|
-
|
8
|
-
LIB_HOME = File.expand_path File.dirname(__FILE__) unless defined?(LIB_HOME)
|
9
24
|
|
10
|
-
|
11
|
-
|
25
|
+
SLEEP_METRICS = {
|
26
|
+
:create_thread => 0.001,
|
27
|
+
:check_threads => 0.3
|
28
|
+
}.freeze unless defined?(SLEEP_METRICS)
|
29
|
+
|
30
|
+
@sysinfo = nil
|
31
|
+
@logger = Drydock::Screen
|
32
|
+
@loglev = 1
|
33
|
+
@debug = false
|
34
|
+
@abort = false
|
35
|
+
|
36
|
+
class << self
|
37
|
+
attr_accessor :loglev, :logger
|
12
38
|
end
|
13
|
-
require 'sysinfo'
|
14
|
-
require 'drydock/screen'
|
15
|
-
require 'storable'
|
16
|
-
require 'gibbler'
|
17
|
-
require 'gibbler/aliases'
|
18
|
-
require 'benelux'
|
19
39
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
40
|
+
def sleep(metric)
|
41
|
+
unless SLEEP_METRICS.has_key? metric
|
42
|
+
raise "unknown sleep metric: #{metric}"
|
43
|
+
end
|
44
|
+
Kernel.sleep SLEEP_METRICS[metric]
|
45
|
+
end
|
25
46
|
|
26
|
-
# Puts +msg+ to
|
27
|
-
def lflush;
|
28
|
-
def li(*msg); msg.each { |m|
|
29
|
-
def li1(*msg); li *msg if
|
30
|
-
def li2(*msg); li *msg if
|
31
|
-
def li3(*msg); li *msg if
|
32
|
-
def li4(*msg); li *msg if
|
47
|
+
# Puts +msg+ to +@logger+
|
48
|
+
def lflush; @logger.flush if @logger.respond_to? :flush; end
|
49
|
+
def li(*msg); msg.each { |m| @logger.puts m } if !quiet? end
|
50
|
+
def li1(*msg); li *msg if @loglev >= 1 end
|
51
|
+
def li2(*msg); li *msg if @loglev >= 2 end
|
52
|
+
def li3(*msg); li *msg if @loglev >= 3 end
|
53
|
+
def li4(*msg); li *msg if @loglev >= 4 end
|
33
54
|
|
34
|
-
# Puts +msg+ to
|
35
|
-
def le(*msg);
|
36
|
-
# Puts +msg+ to
|
55
|
+
# Puts +msg+ to +@logger+ with "ERROR: " prepended
|
56
|
+
def le(*msg); @logger.puts " " << msg.join("#{$/} ").color(:red); end
|
57
|
+
# Puts +msg+ to +@logger+ if +Rudy.debug?+ returns true
|
37
58
|
def ld(*msg)
|
38
|
-
|
59
|
+
@logger.puts "D: " << msg.join("#{$/}D: ") if debug?
|
39
60
|
end
|
40
61
|
|
41
|
-
def
|
42
|
-
|
43
|
-
|
62
|
+
def sysinfo
|
63
|
+
@sysinfo = SysInfo.new.freeze if @sysinfo.nil?
|
64
|
+
@sysinfo
|
65
|
+
end
|
44
66
|
|
45
|
-
def quiet
|
46
|
-
def enable_quiet
|
47
|
-
def disable_quiet
|
67
|
+
def quiet?() @loglev == 0 end
|
68
|
+
def enable_quiet() @loglev = 0 end
|
69
|
+
def disable_quiet() @loglev = 1 end
|
48
70
|
|
49
|
-
def debug
|
50
|
-
def enable_debug
|
51
|
-
def disable_debug
|
71
|
+
def debug?() @debug == true end
|
72
|
+
def enable_debug() @debug = true end
|
73
|
+
def disable_debug() @debug = false end
|
52
74
|
|
53
|
-
def abort?
|
54
|
-
|
55
|
-
end
|
56
|
-
def abort!() @@abort = true end
|
75
|
+
def abort?() @abort == true end
|
76
|
+
def abort!() @abort = true end
|
57
77
|
|
58
78
|
def rescue(&blk)
|
59
79
|
blk.call
|
@@ -61,15 +81,20 @@ module Stella
|
|
61
81
|
Stella.le "ERROR: #{ex.message}"
|
62
82
|
Stella.li3 ex.backtrace
|
63
83
|
end
|
84
|
+
|
85
|
+
require 'stella/exceptions'
|
86
|
+
|
87
|
+
autoload :VERSION, 'stella/version'
|
88
|
+
autoload :Utils, 'stella/utils'
|
89
|
+
autoload :Config, 'stella/config'
|
90
|
+
autoload :Data, 'stella/data'
|
91
|
+
autoload :Testplan, 'stella/testplan'
|
92
|
+
autoload :Engine, 'stella/engine'
|
93
|
+
autoload :Client, 'stella/client'
|
94
|
+
|
95
|
+
require 'stella/mixins'
|
64
96
|
end
|
65
97
|
|
66
|
-
require 'stella/version'
|
67
|
-
require 'stella/exceptions'
|
68
|
-
require 'stella/utils'
|
69
|
-
require 'stella/config'
|
70
|
-
require 'stella/data'
|
71
|
-
require 'stella/client'
|
72
98
|
|
73
|
-
|
74
|
-
Stella::Utils.require_glob(Stella::LIB_HOME, 'stella', '*.rb')
|
99
|
+
|
75
100
|
|
data/lib/stella/cli.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
|
2
|
-
|
3
2
|
class Stella::CLI < Drydock::Command
|
4
3
|
attr_accessor :exit_code
|
5
4
|
|
@@ -20,36 +19,22 @@ class Stella::CLI < Drydock::Command
|
|
20
19
|
@exit_code = (ret ? 0 : 1)
|
21
20
|
end
|
22
21
|
|
23
|
-
def
|
22
|
+
def generate_valid?
|
24
23
|
create_testplan
|
25
24
|
end
|
26
25
|
|
27
|
-
def
|
26
|
+
def generate
|
28
27
|
opts = {}
|
29
28
|
opts[:hosts] = @hosts
|
30
|
-
[:nowait, :clients, :repetitions, :
|
29
|
+
[:nowait, :clients, :repetitions, :duration].each do |opt|
|
31
30
|
opts[opt] = @option.send(opt) unless @option.send(opt).nil?
|
32
31
|
end
|
33
32
|
ret = Stella::Engine::Load.run @testplan, opts
|
34
33
|
@exit_code = (ret ? 0 : 1)
|
35
34
|
end
|
36
35
|
|
37
|
-
def stress_valid?
|
38
|
-
create_testplan
|
39
|
-
end
|
40
|
-
|
41
|
-
def stress
|
42
|
-
opts = {}
|
43
|
-
opts[:hosts] = @hosts
|
44
|
-
[:clients, :repetitions, :duration].each do |opt|
|
45
|
-
opts[opt] = @option.send(opt) unless @option.send(opt).nil?
|
46
|
-
end
|
47
|
-
ret = Stella::Engine::Stress.run @testplan, opts
|
48
|
-
@exit_code = (ret ? 0 : 1)
|
49
|
-
end
|
50
|
-
|
51
36
|
def example
|
52
|
-
base_path = File.expand_path(File.join(
|
37
|
+
base_path = File.expand_path(File.join(STELLA_LIB_HOME, '..'))
|
53
38
|
thin_path = File.join(base_path, 'support', 'sample_webapp', 'config.ru')
|
54
39
|
webrick_path = File.join(base_path, 'support', 'sample_webapp', 'app.rb')
|
55
40
|
tp_path = File.join(base_path, 'examples', 'essentials', 'plan.rb')
|
@@ -63,13 +48,13 @@ class Stella::CLI < Drydock::Command
|
|
63
48
|
puts %Q{
|
64
49
|
http://127.0.0.1:3114/
|
65
50
|
}
|
66
|
-
puts "3.
|
51
|
+
puts "3. Verify the testplan is correct (functional test):".bright
|
67
52
|
puts %Q{
|
68
53
|
$ stella verify -p #{tp_path} 127.0.0.1:3114
|
69
54
|
}
|
70
|
-
puts "4.
|
55
|
+
puts "4. Generate requests (load test):".bright
|
71
56
|
puts %Q{
|
72
|
-
$ stella
|
57
|
+
$ stella generate -p #{tp_path} 127.0.0.1:3114
|
73
58
|
}
|
74
59
|
end
|
75
60
|
|
@@ -91,10 +76,11 @@ class Stella::CLI < Drydock::Command
|
|
91
76
|
@testplan = Stella::Testplan.load_file @option.testplan
|
92
77
|
else
|
93
78
|
opts = {}
|
94
|
-
opts[:
|
79
|
+
opts[:wait] = @option.wait if @option.wait
|
95
80
|
@testplan = Stella::Testplan.new(@argv, opts)
|
96
81
|
end
|
97
82
|
@testplan.check! # raise errors, update usecase ratios
|
83
|
+
@testplan.freeze # cascades through usecases and requests
|
98
84
|
Stella.li2 " #{@option.testplan || @testplan.desc} (#{@testplan.digest})"
|
99
85
|
true
|
100
86
|
end
|