auto_test 0.1.9.8.7 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,14 +5,16 @@ require 'auto_test'
5
5
 
6
6
  describe "Application" do
7
7
  describe "auto_test" do
8
-
8
+ # load the fixtures
9
9
  if AutoTest::Test.use_fixtures? then
10
10
  fixtures(*AutoTest::Test.get_fixtures)
11
11
  end
12
12
  it "simulates the error" do
13
+ # load test data
13
14
  load "#{Rails.root}/db/test_seeds.rb"
14
15
  sessions_array = []
15
16
  puts "Firefox is getting started..."
17
+ # get the path to simulate
16
18
  begin
17
19
  paths = File.new("#{Rails.root}/log/new_path.log", "r")
18
20
  rescue
@@ -22,24 +24,30 @@ describe "Application" do
22
24
  sessions = search_sessions
23
25
  number_of_sessions = sessions.size
24
26
  user = Array.new(AutoTest::Test.get_number_of_sessions.to_i)
27
+ # start right number of firefox browsers
25
28
  for i in 0..number_of_sessions-1 do
26
29
  browser = Watir::Browser.new :ff
27
30
  sessions_array[sessions[i]] = browser
28
31
  end
32
+
29
33
  while line = paths.gets do
34
+ # parse the path
30
35
  if !line.chop!.end_with? "ID" then
31
36
  hash = Hash.new
32
37
  a = line.gsub!(/[{}\"]/,'').split(/\=\>/)
33
38
  session = sessions_array[a[0].split(":").first.to_i]
34
39
  session_index = sessions_array.index(session)
35
40
  session.windows.first.use
41
+ # login
36
42
  if a[0].split(":").second == AutoTest::Authentication.get_login_path then
37
43
  session.goto home + AutoTest::Authentication.get_login_path
38
44
  hash["#{a[0]}"] = a[1]
39
45
  login(session, user[session_index].class.find(user[session_index].id))
46
+ # logout
40
47
  elsif a[1] == AutoTest::Authentication.get_logout_path then
41
48
  hash["#{a[0]}"] = AutoTest::Authentication.get_logout_path
42
49
  session.goto home + AutoTest::Authentication.get_logout_path
50
+ # fill in form
43
51
  elsif a[1][0] == "[" then
44
52
  texts = []
45
53
  inputs = a[1][1,a[1].size-2].split(/,/)
@@ -58,23 +66,30 @@ describe "Application" do
58
66
  session.text_field(:name => inputs[i].strip).set inputs[i+1].strip
59
67
  end
60
68
  i = i + 2
69
+ # wait 2 seconds, so the user can follow the simulation
70
+ sleep 2
61
71
  end
62
72
  hash["#{a[0]}"] = texts
73
+ # click submit button
63
74
  session.button(:type => "submit").click
64
75
  else
76
+ # find and click link
65
77
  link = a[1].split(/\+\+\+/)
66
78
  href = link[0]
67
79
  text = link[1]
68
80
  session.a(:href => href, :text => text).flash
69
81
  session.a(:href => href, :text => text).click
70
82
  begin
83
+ # if a javascript alert pops up, accept it
71
84
  session.driver.switch_to.alert.accept
72
85
  rescue
73
86
  end
74
87
  hash["#{a[0]}"] = a[1]
75
88
  end
89
+ # wait 2 seconds, so the user can follow the simulation
76
90
  sleep 2
77
91
  else
92
+ # get the right user
78
93
  line_parts = line.split(":")
79
94
  session_index = line_parts[0].to_i
80
95
  id = line_parts[1].to_i
@@ -90,13 +105,16 @@ describe "Application" do
90
105
  end
91
106
  end
92
107
 
108
+ # login a user in a certain browser
93
109
  def login(browser, user)
94
110
  if AutoTest::Authentication.use_db_users then
111
+ # if data read from db, fill in forms
95
112
  AutoTest::Authentication.get_login_attributes.each do |field|
96
113
  browser.text_field(:id => field[1]).set user.send(field[0].to_sym)
97
114
  end
98
115
  sleep 1
99
116
  else
117
+ # if data given by tester, fill these in
100
118
  index = AutoTest::Authentication.get_login_names.index(AutoTest::Authentication.get_unique_login_attribute_name)
101
119
  user_data = nil
102
120
  user.class.find(:all).each do |u|
@@ -114,6 +132,7 @@ def login(browser, user)
114
132
  browser.button(:type => 'submit').click
115
133
  end
116
134
 
135
+ # get the session ids from the path
117
136
  def search_sessions
118
137
  begin
119
138
  path_to_search = File.new("#{Rails.root}/log/new_path.log", "r")
@@ -4,7 +4,7 @@ path = %x(gem which auto_test)
4
4
  path = path[0..path.size-15]
5
5
 
6
6
  namespace :auto_test do
7
- desc "starting the test"
7
+ desc "Starting the test"
8
8
  task :test do
9
9
  puts "Running auto_test..."
10
10
  sh "rspec '#{path}/spec/requests/auto_spec.rb' -o '#{path}/../log/rspec.txt'"
@@ -15,7 +15,7 @@ namespace :auto_test do
15
15
  Rake::Task["auto_test:error_calc"].invoke
16
16
  end
17
17
 
18
- desc "calculating the errors"
18
+ desc "Calculating the errors"
19
19
  task :error_calc do
20
20
  err = File.read("#{Rails.root}/log/errors.log")
21
21
  if err.to_i > 0 then
@@ -51,7 +51,7 @@ namespace :auto_test do
51
51
  end
52
52
 
53
53
 
54
- desc 'stopping rails'
54
+ desc 'Stopping rails server'
55
55
  task :stop do
56
56
  begin
57
57
  pid_file = 'tmp/pids/server.pid'
@@ -1,6 +1,7 @@
1
1
  module AutoTest
2
2
  module Test
3
3
  module_function
4
+
4
5
  # initialize all variables
5
6
  def initialize_test
6
7
  Error.init_error
@@ -20,6 +21,9 @@ module AutoTest
20
21
  init_number_of_test_runs
21
22
  end
22
23
 
24
+ ###############################################################
25
+ ### initializers
26
+
23
27
  def init_links
24
28
  @@links = []
25
29
  end
@@ -27,22 +31,6 @@ module AutoTest
27
31
  def init_fixtures
28
32
  @@use_fixtures = false
29
33
  end
30
-
31
- def use_fixtures?
32
- @@use_fixtures
33
- end
34
-
35
- def fixtures(*fixtures)
36
- @@fixtures = fixtures
37
- end
38
-
39
- def get_fixtures
40
- @@fixtures
41
- end
42
-
43
- def use_fixtures(bool)
44
- @@use_fixtures = bool
45
- end
46
34
 
47
35
  def init_number_of_test_runs
48
36
  @@runs = 1
@@ -85,9 +73,49 @@ module AutoTest
85
73
  def init_inputs
86
74
  @@inputs = Hash.new
87
75
  end
88
-
89
76
 
77
+ def init_sessions
78
+ @sessions = Hash.new
79
+ end
80
+
81
+ def init_hash_sessions(key, value)
82
+ @sessions["#{key}"] = value
83
+ end
84
+
85
+ def init_sessions_array
86
+ @sessions_array = []
87
+ end
88
+
89
+ def init_ready
90
+ @ready = Array.new(Test.get_number_of_sessions)
91
+ end
92
+
93
+
94
+ ###############################################################
95
+
96
+ # getter for use fixtures
97
+ def use_fixtures?
98
+ @@use_fixtures
99
+ end
100
+
101
+ # set the fixtures to be used
102
+ def fixtures(*fixtures)
103
+ @@fixtures = fixtures
104
+ end
105
+
106
+ # get the fixtures
107
+ def get_fixtures
108
+ @@fixtures
109
+ end
110
+
111
+ # determine if fixtures should be used
112
+ def use_fixtures(bool)
113
+ @@use_fixtures = bool
114
+ end
115
+
116
+ # check the invariants
90
117
  def check_invariants
118
+ # check always present invariant
91
119
  get_always_present.each do |present|
92
120
  if present[0].find(:first, :conditions => "#{present[1]} = '#{present[2]}'") == nil then
93
121
  if stop_at_first_error? then stop! end
@@ -99,6 +127,7 @@ module AutoTest
99
127
  Error.inc_error(message)
100
128
  end
101
129
  end
130
+ # check object dependency invariant
102
131
  get_object_dependencies.each do |dependency|
103
132
  children = dependency[0].find(:all)
104
133
  children.each do |child|
@@ -117,26 +146,32 @@ module AutoTest
117
146
  end
118
147
  end
119
148
 
149
+ # user function to set number of test runs
120
150
  def set_number_of_test_runs(number)
121
151
  @@runs = number
122
152
  end
123
153
 
154
+ # get number of test runs
124
155
  def get_number_of_test_runs
125
156
  @@runs
126
157
  end
127
-
158
+
159
+ # user function ti stop at first error
128
160
  def stop_at_first_error(stop_at_first_error)
129
161
  @@stop_at_first_error = stop_at_first_error
130
162
  end
131
163
 
164
+ # get stop at first error
132
165
  def stop_at_first_error?
133
166
  @@stop_at_first_error
134
167
  end
135
168
 
169
+ # has the test to be stopped?
136
170
  def stop?
137
171
  @@stop
138
172
  end
139
173
 
174
+ # stop the test
140
175
  def stop!
141
176
  @@stop = true
142
177
  end
@@ -146,24 +181,27 @@ module AutoTest
146
181
  @@depth = @@depth + 1
147
182
  end
148
183
 
184
+ # get depth
149
185
  def get_depth
150
186
  @@depth
151
187
  end
152
-
188
+
189
+ # user function to set the maximum depth
153
190
  def set_max_depth(value)
154
191
  @@max_depth = value
155
192
  end
156
193
 
194
+ # get max depth
157
195
  def get_max_depth
158
196
  @@max_depth
159
197
  end
160
198
 
161
-
162
199
  # get object dependencies
163
200
  def get_object_dependencies
164
201
  @@dependencies
165
202
  end
166
203
 
204
+ # user function to set invariant for object dependency
167
205
  # for all objects of class child, there has to be one object of class parent
168
206
  # attribute_name is the column that joins the two tables
169
207
  def set_object_dependency(child, parent, attribute_name)
@@ -176,95 +214,113 @@ module AutoTest
176
214
  @@inputs.store(input, values)
177
215
  end
178
216
 
217
+ # get inputs
179
218
  def get_inputs
180
219
  @@inputs
181
220
  end
182
221
 
222
+ # user function to set the number of sessions used to test the app
183
223
  def set_number_of_sessions(number)
184
224
  @@number_of_sessions = number
185
225
  end
186
226
 
227
+ # get number of sessions
187
228
  def get_number_of_sessions
188
229
  @@number_of_sessions
189
230
  end
190
-
231
+
232
+ # user function to set the invariant 'always present'
191
233
  # add an array of the classname, key and value of the object to be checked every cycle
192
234
  def always_present(class_name, key, value)
193
235
  @@always_present << [class_name, key, value]
194
236
  end
195
237
 
238
+ # get invariant always present
196
239
  def get_always_present
197
240
  @@always_present
198
241
  end
199
242
 
243
+ # get the links to exclude from the test
200
244
  def get_links_to_exclude
201
245
  @@links
202
246
  end
203
247
 
204
- # list of links that will not be clicked during the test
248
+ # user function to set the list of links that will not be clicked during the test
205
249
  def links_to_exclude(*links)
206
250
  @@links = links
207
251
  end
208
252
 
253
+ # setter for paths
209
254
  def paths=(value)
210
255
  @paths = value
211
256
  end
212
257
 
258
+ # getter for paths
213
259
  def paths
214
260
  @paths
215
261
  end
216
262
 
263
+ # getter for iterations
217
264
  def iterations
218
265
  @iterations
219
266
  end
220
267
 
268
+ # setter for iterations
221
269
  def iterations=(value)
222
270
  @iterations = value
223
271
  end
224
272
 
273
+ # getter for link counter
225
274
  def link_counter
226
275
  @link_counter
227
276
  end
277
+
278
+ # setter for link counter
228
279
  def link_counter=(value)
229
280
  @link_counter = value
230
281
  end
231
282
 
283
+ # setter for run
232
284
  def run=(value)
233
285
  @run = value
234
286
  end
235
287
 
288
+ # getter for run
236
289
  def run
237
290
  @run
238
291
  end
239
292
 
293
+ # getter for action path
240
294
  def action_path
241
295
  @@action_paths
242
296
  end
243
297
 
298
+ # getter for no authentication
244
299
  def no_auth
245
300
  @@no_auth
246
301
  end
247
302
 
303
+ # user function to determine that the application has no authentification
248
304
  def set_no_auth
249
305
  @@no_auth = true
250
306
  end
251
-
307
+
308
+ # method to add an element to the action path
252
309
  def add_to_action_path(hash)
253
310
  @@action_paths << hash
254
311
  end
255
312
 
313
+ # getter for number of users logged in during the test
256
314
  def users_logged_in
257
315
  @users_logged_in
258
316
  end
259
317
 
260
- def init_ready
261
- @ready = Array.new(Test.get_number_of_sessions)
262
- end
263
-
318
+ # set one session to be finished in this round of the test
264
319
  def ready(i)
265
320
  @ready[i-1] = true
266
321
  end
267
322
 
323
+ # see if all sessions are ready
268
324
  def ready?
269
325
  count = 0
270
326
  for i in 0..@ready.size-1 do
@@ -279,42 +335,39 @@ module AutoTest
279
335
  end
280
336
  end
281
337
 
282
- def init_sessions
283
- @sessions = Hash.new
284
- end
285
-
286
- def init_hash_sessions(key, value)
287
- @sessions["#{key}"] = value
288
- end
289
-
338
+ # set variables for a session
290
339
  def sessions(index, key, value)
291
340
  @sessions["#{index}"]["#{key}"] = value
292
341
  end
293
342
 
343
+ # get variables for a session
294
344
  def get_sessions(i, key)
295
345
  @sessions["#{i}"]["#{key}"]
296
346
  end
297
347
 
348
+ # getter for sessions array
298
349
  def get_sessions_array
299
350
  @sessions_array
300
351
  end
301
352
 
302
- def init_sessions_array
303
- @sessions_array = []
304
- end
305
-
353
+
354
+ # method to add a session
306
355
  def add_to_sessions_array(session)
307
356
  @sessions_array << session
308
357
  end
309
358
 
359
+ # setter for users logged in
310
360
  def users_logged_in=(value)
311
361
  @users_logged_in = value
312
362
  end
313
363
 
364
+ # user function to set the maximum number of links a session may click before the
365
+ # next session continues
314
366
  def set_max_number_of_session_links(no)
315
367
  @@no_session_links = no
316
368
  end
317
369
 
370
+ # getter fo maximum number of session links
318
371
  def get_max_number_of_session_links
319
372
  @@no_session_links
320
373
  end