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: 26 inserted, 180 deleted

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