Description:
load test reads site_url from command line
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r315:faf1f66729ca - - 5 files changed: 28 inserted, 182 deleted

@@ -1,7 +1,7
1 1 How to call
2 2 ===========
3 3
4 4 Load test for front page:
5 5
6 - ruby runner.rb common_visitors.rb FirstPageViewer 10 -t 10
6 + ruby runner.rb common_visitors.rb FirstPageViewer 20 -t 10 --site_url=http://localhost/cafe
7 7
@@ -1,7 +1,8
1 - visitor "FirstPageViewer" do
2 - stores_cookies
1 + if !defined? VISITOR_OPTION_LIST
2 + VISITOR_OPTION_LIST = {}
3 + end
3 4
4 - site_url "http://localhost:3000"
5 -
5 + visitor "FirstPageViewer", VISITOR_OPTION_LIST do
6 + stores_cookies
6 7 get "/"
7 8 end
@@ -109,49 +109,59
109 109 # puts "Total requested = #{stat[:num_requested]}"
110 110 # puts "Average = #{stat[:avg_request_time]}"
111 111 # puts "S.D. = #{stat[:std_dev]}"
112 112 total_req += stat[:num_requested]
113 113 end
114 114
115 115 elapsed_time = all_finish_time - all_start_time
116 116
117 117 puts
118 118 puts "Total time = #{elapsed_time} sec."
119 119 puts "Total requests = #{total_req}"
120 120 puts "Trans. per sec = #{total_req/elapsed_time}"
121 121 end
122 122
123 123 ###########################
124 124 # MAIN
125 125 ###########################
126 126
127 127 if ARGV.length==0
128 128 show_usage
129 129 exit(0)
130 130 end
131 131
132 132 visitor_file = ARGV.shift
133 - require visitor_file
134 133
135 134 load_time = 60
136 135 dry_run = false
137 136
138 - #build visitor list
137 + #build visitor/option list
139 138 visitor_list = {}
139 + visitor_option_list = {}
140 140 while ARGV.length>0
141 141 key = ARGV.shift
142 142
143 143 case key
144 144 when '-d'
145 145 dry_run = true
146 146 when '-t'
147 147 num = ARGV.shift.to_i
148 148 load_time = num
149 149 else
150 - num = ARGV.shift.to_i
151 - visitor_list[key] = num
150 + if key =~ /--(\w+)=(.*)/
151 + # options
152 + lm = Regexp.last_match
153 + visitor_option_list[lm[1]] = lm[2]
154 + else
155 + # new visitor
156 + num = ARGV.shift.to_i
157 + visitor_list[key] = num
158 + end
152 159 end
153 160 end
154 161
162 + VISITOR_OPTION_LIST = visitor_option_list
163 + require visitor_file
164 +
155 165 initialize_temp_dir
156 166 runner visitor_list, load_time, {:dry_run => dry_run}
157 167
@@ -99,48 +99,54
99 99 else
100 100 key_s = key
101 101 end
102 102 plist[key_s] = val
103 103 end
104 104 plist
105 105 end
106 106
107 107 def self.get(url,params=nil)
108 108 self.commands = [] if self.commands==nil
109 109 self.commands << {
110 110 :command => :get,
111 111 :url => url,
112 112 :params => Visitor.preprocess_param_hash(params) }
113 113 end
114 114
115 115 def self.post(url,params=nil,options=nil)
116 116 self.commands = [] if self.commands==nil
117 117 self.commands << { :command => :post,
118 118 :url => url,
119 119 :params => Visitor.preprocess_param_hash(params),
120 120 :options => options }
121 121 end
122 122
123 + def self.process_options(options)
124 + if options.has_key? "site_url"
125 + self.base_url = options["site_url"]
126 + end
127 + end
128 +
123 129 def substitute_id(st)
124 130 return st if !(st.is_a? String)
125 131 st.gsub(/(()|(\$))\$\{id\}/) do |s|
126 132 if s=="${id}"
127 133 @id.to_s
128 134 else
129 135 "${id}"
130 136 end
131 137 end
132 138 end
133 139
134 140 def encode_params(params)
135 141 enc = ""
136 142 if params!=nil and params.length!=0
137 143 params.each do |key,val|
138 144 if enc != ""
139 145 enc += '&'
140 146 end
141 147 val = substitute_id(val)
142 148 enc += URI.escape(key) + '=' + URI.escape(val.to_s)
143 149 end
144 150 end
145 151 enc
146 152 end
@@ -249,37 +255,38
249 255 if num_requested>0
250 256 average_request_time = totaltime / num_requested
251 257 else
252 258 average_request_time = 0
253 259 end
254 260
255 261 sq_sum = 0.0
256 262 @statistics.each do |stat|
257 263 sq_sum += (stat[:time]-average_request_time) ** 2
258 264 end
259 265 if num_requested>1
260 266 sd = Math.sqrt(sq_sum/(num_requested-1))
261 267 else
262 268 sd = 0
263 269 end
264 270
265 271 return {
266 272 :num_requested => num_requested,
267 273 :avg_request_time => average_request_time,
268 274 :std_dev => sd
269 275 }
270 276 end
271 277 end
272 278
273 - def visitor(cname,&blk)
279 + def visitor(cname,options={},&blk)
274 280 c = Class.new(Visitor)
275 281 begin
276 282 Object.const_set(cname,c)
277 283 rescue NameError
278 284 puts <<ERROR
279 285 Error on type #{cname}.
280 286 Type name should be capitalized and follow Ruby constant naming rule.
281 287 ERROR
282 288 exit(0)
283 289 end
290 + c.process_options(options)
284 291 c.instance_eval(&blk)
285 292 end
deleted file
You need to be logged in to leave comments. Login now