Description:
added first page load test on localhost
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r314:933be61bc431 - - 4 files changed: 28 inserted, 4 deleted

@@ -0,0 +1,7
1 + How to call
2 + ===========
3 +
4 + Load test for front page:
5 +
6 + ruby runner.rb common_visitors.rb FirstPageViewer 10 -t 10
7 +
@@ -0,0 +1,7
1 + visitor "FirstPageViewer" do
2 + stores_cookies
3 +
4 + site_url "http://localhost:3000"
5 +
6 + get "/"
7 + end
@@ -1,67 +1,75
1 1 #
2 2 # This file is part of a web load testing tool (currently having no name)
3 3 # Copyright (C) 2008 Jittat Fakcharoenphol
4 4 #
5 5 # This program is free software; you can redistribute it and/or modify
6 6 # it under the terms of the GNU General Public License as published by
7 7 # the Free Software Foundation; either version 2 of the License, or
8 8 # (at your option) any later version.
9 9 #
10 10 # This program is distributed in the hope that it will be useful, but
11 11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 13 # General Public License for more details.
14 14 #
15 15 # You should have received a copy of the GNU General Public License
16 16 # along with this program; if not, write to the Free Software
17 17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 18 # 02110-1301, USA.
19 19 #
20 20
21 21 require 'visitor_curl_cli'
22 22
23 + TEMP_DIR = './tmp'
24 +
23 25 def show_usage
24 26 puts <<USAGE
25 27 using: ruby runner.rb <visitor_file> [<type> <number>] [<type> <number>] ... [options]
26 28 * visitor_file : your visitor definition file, (with or without .rb)
27 29 * type, number : the type and the number of visitors of that type
28 30 * options : any of the following
29 31 -t <sec> specify how long (in seconds)
30 32 -d dry-run: run, but make no real http requests
31 33 USAGE
32 34 end
33 35
36 + def initialize_temp_dir
37 + if !FileTest.exists? TEMP_DIR
38 + Dir.mkdir TEMP_DIR
39 + end
40 + end
41 +
34 42 def runner(visitor_lists, load_time=60, options={})
35 43 visitors = []
36 44 vcount = 0
37 45
38 46 visitor_lists.each do |cname, num|
39 47 begin
40 48 c = Kernel.const_get(cname)
41 49
42 50 num.times do
43 - visitors[vcount] = c.new(vcount+1)
51 + visitors[vcount] = c.new(vcount+1, TEMP_DIR)
44 52 visitors[vcount].talkative = true
45 53 vcount += 1
46 54 end
47 55 rescue NameError
48 56 puts "Can't find class #{cname}"
49 57 show_usage
50 58 exit(0)
51 59 end
52 60 end
53 61
54 62 puts "Having #{vcount} visitors"
55 63
56 64 vthread = []
57 65
58 66 all_start_time = Time.new
59 67
60 68 # start all visitors
61 69 vcount.times do |i|
62 70 vthread[i] = Thread.new do
63 71 visitors[i].run(:forever,options)
64 72 end
65 73 end
66 74
67 75 # wait for load_time seconds
@@ -123,26 +131,27
123 131
124 132 visitor_file = ARGV.shift
125 133 require visitor_file
126 134
127 135 load_time = 60
128 136 dry_run = false
129 137
130 138 #build visitor list
131 139 visitor_list = {}
132 140 while ARGV.length>0
133 141 key = ARGV.shift
134 142
135 143 case key
136 144 when '-d'
137 145 dry_run = true
138 146 when '-t'
139 147 num = ARGV.shift.to_i
140 148 load_time = num
141 149 else
142 150 num = ARGV.shift.to_i
143 151 visitor_list[key] = num
144 152 end
145 153 end
146 154
155 + initialize_temp_dir
147 156 runner visitor_list, load_time, {:dry_run => dry_run}
148 157
@@ -11,65 +11,66
11 11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 13 # General Public License for more details.
14 14 #
15 15 # You should have received a copy of the GNU General Public License
16 16 # along with this program; if not, write to the Free Software
17 17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 18 # 02110-1301, USA.
19 19 #
20 20
21 21 require 'rubygems'
22 22 require 'uri'
23 23
24 24 class Visitor
25 25
26 26 attr_accessor :talkative
27 27
28 28 class << self
29 29 attr_accessor :commands
30 30 attr_accessor :base_url
31 31 attr_accessor :cookies_stored
32 32 end
33 33
34 34 def get_cookie_fname
35 - "cookies.#{@id}"
35 + "#{@base_dir}/cookies.#{@id}"
36 36 end
37 37
38 38 def get_output_fname
39 - "output.#{@id}"
39 + "#{@base_dir}/output.#{@id}"
40 40 end
41 41
42 42 def id
43 43 @id
44 44 end
45 45
46 - def initialize(id=0)
46 + def initialize(id=0, base_dir='.')
47 47 # initialize nil class variable
48 48 self.class.base_url = "" if (self.class.base_url) == nil
49 49 self.class.cookies_stored = false if self.class.cookies_stored == nil
50 50
51 51 @id = id
52 + @base_dir = base_dir
52 53 @cookies_fname = get_cookie_fname
53 54 @output_fname = get_output_fname
54 55 @statistics = Array.new
55 56 @talkative = false
56 57
57 58 @stopped = false
58 59 end
59 60
60 61 def cleanup
61 62 trial = 0
62 63 while FileTest.exists?(@cookies_fname)
63 64 File.delete(@cookies_fname)
64 65 if FileTest.exists?(@cookies_fname)
65 66 # wait until system returns
66 67 puts "STILL HERE"
67 68 sleep 1
68 69 trial += 1
69 70 break if trial>10
70 71 end
71 72 end
72 73
73 74 while FileTest.exists?(@output_fname)
74 75 File.delete(@output_fname)
75 76 if FileTest.exists?(@output_fname)
You need to be logged in to leave comments. Login now