auto_test 0.1.9.8.7 → 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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