testability-driver-runner 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/tdrunner.rb CHANGED
@@ -72,7 +72,7 @@ module TDRunner
72
72
 
73
73
  elsif args[0]=='--version'
74
74
  args.shift
75
- puts '1.1.1'
75
+ puts '1.2.0'
76
76
 
77
77
  else
78
78
  break
@@ -190,6 +190,7 @@ module TDRunner
190
190
  end
191
191
 
192
192
  write_failed_sip_file($tdrunner_parameters)
193
+ write_recorded_sip_file($tdrunner_parameters)
193
194
  end
194
195
 
195
196
  #Method for displaying tdrunner help in commandline
@@ -290,6 +291,9 @@ module TDRunner
290
291
  puts "-t execution_profile"
291
292
  puts "\t\tCreate execution profile of failed Test::Unit tests"
292
293
 
294
+ puts "-r execution_profile"
295
+ puts "\t\tCreate execution profile recording of executed tests"
296
+
293
297
  puts "--teardown\tRun test unit teardown only when the testcase is failed."
294
298
 
295
299
  puts "--ordered\tUse with execution profile to run tests as they are ordered"
@@ -100,7 +100,7 @@ module TDRunner
100
100
  begin
101
101
  #paramfile = File.new(paramfilename)
102
102
  #sutlist = paramfile.readlines.join.scan(/<sut +id *= *"([^"]+)"/).map{|i| i[0]}.join(' ')
103
- sutlist = MobyUtil::ParameterXml.instance.sut_list.reject { |item| item.to_s == 'sut_generic' }.join(' ')
103
+ sutlist = TDriver.suts.reject { |item| item.to_s == 'sut_generic' }.join(' ')
104
104
  rescue
105
105
  #sutlist = "Failed to read '#{paramfilename}': #{$!.to_s.gsub(/\s+/, ' ')}"
106
106
  sutlist = "ERROR (#{$!.to_s.gsub(/\s+/, ' ')})"
@@ -45,6 +45,7 @@ module TDRunner
45
45
  remove_excluded_files_from(potential_feature_files)
46
46
  lpt_feature_files = potential_feature_files.sort
47
47
  lpt_feature_files,content_arr=randomize_features(lpt_feature_files,$tdrunner_parameters)
48
+ record_test_to_recorder_profile('cucumber',lpt_feature_files)
48
49
  lpt_feature_files
49
50
  end
50
51
  end
@@ -89,6 +89,15 @@ module TDRunner
89
89
  end
90
90
  end
91
91
 
92
+ def write_recorded_sip_file(tdrunner_parameters)
93
+ if($recorded_tests!=nil && tdrunner_parameters.recorded_execution_profile != nil && !$recorded_tests.empty?)
94
+ file = File.open(tdrunner_parameters.recorded_execution_profile.to_s,'w')
95
+ $recorded_tests.flatten.each { |x| file.write(x.to_s+"\n")}
96
+ file.close
97
+ puts 'Recorded execution profile created: '+ tdrunner_parameters.recorded_execution_profile
98
+ end
99
+ end
100
+
92
101
  def trap_pause
93
102
  puts "\nExecution paused...\n"
94
103
  puts "\nStop execution Yes or No?:"
@@ -539,6 +548,20 @@ module TDRunner
539
548
  "#{m}m#{'%.3f' % s}s"
540
549
  end
541
550
 
551
+ def record_test_to_recorder_profile(framework,record)
552
+ if $tdrunner_parameters.recorded_execution_profile
553
+ $recorded_tests ||= Array.new
554
+ case framework
555
+ when 'cucumber'
556
+ record.each do |feature|
557
+ $recorded_tests << "#{feature}=1"
558
+ end
559
+ when 'test_unit'
560
+ $recorded_tests << "#{record}=1"
561
+ end
562
+ end
563
+ end
564
+
542
565
  def wait_for_starttime(tdrunner_parameters)
543
566
  #If the start time is defined then only start execution at this time
544
567
  if tdrunner_parameters.start_time!=nil
@@ -125,6 +125,7 @@ module TDRunner
125
125
  @tdrunner_combine_report=nil
126
126
  @start_time=nil
127
127
  @failed_execution_profile=nil
128
+ @recorded_execution_profile=nil
128
129
  parse_tdrunner_parameters(args)
129
130
  end
130
131
 
@@ -194,6 +195,7 @@ module TDRunner
194
195
  make_execution_profile=false
195
196
  combine_report_defined=false
196
197
  make_failed_execution_profile_defined=false
198
+ make_recorded_execution_profile_defined=false
197
199
  parameters_contains_framework_command=check_if_parameters_contain_a_framework_command(args)
198
200
 
199
201
  args.each do |value|
@@ -248,6 +250,10 @@ module TDRunner
248
250
  make_failed_execution_profile_defined=false
249
251
  @failed_execution_profile=value
250
252
  end
253
+ if make_recorded_execution_profile_defined==true
254
+ make_recorded_execution_profile_defined=false
255
+ @recorded_execution_profile=value
256
+ end
251
257
 
252
258
  if value.to_s == '--teardown'
253
259
  @tdrunner_teardown=true
@@ -279,6 +285,9 @@ module TDRunner
279
285
  if value.to_s == '-t'
280
286
  make_failed_execution_profile_defined=true
281
287
  end
288
+ if value.to_s == '-r'
289
+ make_recorded_execution_profile_defined=true
290
+ end
282
291
 
283
292
  end
284
293
 
@@ -316,6 +325,10 @@ module TDRunner
316
325
  failed_profile_location=create_failed_sip(@failed_execution_profile)
317
326
  @failed_execution_profile=failed_profile_location
318
327
  end
328
+ if @recorded_execution_profile!=nil
329
+ recorded_profile_location=create_failed_sip(@recorded_execution_profile)
330
+ @recorded_execution_profile=recorded_profile_location
331
+ end
319
332
  end
320
333
  def create_failed_sip(failed_sip_profile)
321
334
  sip_file=nil
@@ -406,6 +419,9 @@ module TDRunner
406
419
  def failed_execution_profile()
407
420
  @failed_execution_profile
408
421
  end
422
+ def recorded_execution_profile()
423
+ @recorded_execution_profile
424
+ end
409
425
  def tdrunner_ordered()
410
426
  @tdrunner_ordered
411
427
  end
@@ -174,6 +174,7 @@ begin
174
174
  current_run_time=Time.now-run_start_time
175
175
  puts 'Run time: '+ format_duration(current_run_time)
176
176
  #end SIERRA runner
177
+
177
178
 
178
179
  result.remove_listener(Test::Unit::TestResult::FAULT, fault_listener)
179
180
  result.remove_listener(Test::Unit::TestResult::CHANGED, result_listener)
@@ -267,6 +268,129 @@ begin
267
268
  module Test
268
269
  module Unit
269
270
  class TestCase
271
+
272
+ DESCENDANTS = []
273
+
274
+ class << self
275
+ def inherited(sub_class)
276
+ DESCENDANTS << sub_class
277
+ end
278
+
279
+ # Rolls up all of the test* methods in the fixture into
280
+ # one suite, creating a new instance of the fixture for
281
+ # each method.
282
+ def suite
283
+ method_names = public_instance_methods(true).collect {|name| name.to_s}
284
+ tests = method_names.delete_if {|method_name| method_name !~ /^test./}
285
+ suite = TestSuite.new(name, self)
286
+ tests.sort.each do |test|
287
+ catch(:invalid_test) do
288
+ suite << new(test)
289
+ end
290
+ end
291
+ if suite.empty?
292
+ catch(:invalid_test) do
293
+ suite << new("default_test")
294
+ end
295
+ end
296
+ suite
297
+ end
298
+
299
+ # Called before every test case runs. Can be used
300
+ # to set up fixture information used in test case
301
+ # scope.
302
+ #
303
+ # Here is an example test case:
304
+ # class TestMyClass < Test::Unit::TestCase
305
+ # class << self
306
+ # def startup
307
+ # ...
308
+ # end
309
+ # end
310
+ #
311
+ # def setup
312
+ # ...
313
+ # end
314
+ #
315
+ # def test_my_class1
316
+ # ...
317
+ # end
318
+ #
319
+ # def test_my_class2
320
+ # ...
321
+ # end
322
+ # end
323
+ #
324
+ # Here is a call order:
325
+ # * startup
326
+ # * setup
327
+ # * test_my_class1 (or test_my_class2)
328
+ # * setup
329
+ # * test_my_class2 (or test_my_class1)
330
+ #
331
+ # Note that you should not assume test order. Tests
332
+ # should be worked in any order.
333
+ def startup
334
+
335
+ end
336
+
337
+ # Called after every test case runs. Can be used to tear
338
+ # down fixture information used in test case scope.
339
+ #
340
+ # Here is an example test case:
341
+ # class TestMyClass < Test::Unit::TestCase
342
+ # class << self
343
+ # def shutdown
344
+ # ...
345
+ # end
346
+ # end
347
+ #
348
+ # def teardown
349
+ # ...
350
+ # end
351
+ #
352
+ # def test_my_class1
353
+ # ...
354
+ # end
355
+ #
356
+ # def test_my_class2
357
+ # ...
358
+ # end
359
+ # end
360
+ #
361
+ # Here is a call order:
362
+ # * test_my_class1 (or test_my_class2)
363
+ # * teardown
364
+ # * test_my_class2 (or test_my_class1)
365
+ # * teardown
366
+ # * shutdown
367
+ #
368
+ # Note that you should not assume test order. Tests
369
+ # should be worked in any order.
370
+ def shutdown
371
+
372
+ end
373
+ end
374
+
375
+ attr_reader :method_name
376
+
377
+ # Creates a new instance of the fixture for running the
378
+ # test represented by test_method_name.
379
+ def initialize(test_method_name)
380
+ throw :invalid_test unless respond_to?(test_method_name)
381
+ test_method = method(test_method_name)
382
+ throw :invalid_test if test_method.arity > 0
383
+ if test_method.respond_to?(:owner)
384
+ if test_method.owner.class != Module and
385
+ self.class != test_method.owner
386
+ throw :invalid_test
387
+ end
388
+ end
389
+ @method_name = test_method_name
390
+ @test_passed = true
391
+ @interrupted = false
392
+ end
393
+
270
394
  # Runs the individual test method represented by this
271
395
  # instance of the fixture, collecting statistics, failures
272
396
  # and errors in result.
@@ -276,23 +400,37 @@ begin
276
400
  @_result = result
277
401
  @case_contents_array=case_contents_array
278
402
  test_skipped = false
403
+ skip_text = ""
404
+
279
405
  begin
280
406
 
281
- if MobyUtil::Parameter[ :runner_skip_enabled, "false" ] == "true"
282
-
283
- fail_execs = tdriver_get_current_by_status( "failed" )
284
- pass_execs = tdriver_get_current_by_status( "passed" )
285
-
286
- fail_execs = fail_execs.respond_to?( :count ) ? fail_execs.count : 0
287
- pass_execs = pass_execs.respond_to?( :count ) ? pass_execs.count : 0
407
+ if skip_sequential = TDriver::Parameter[ :runner_sequence_skip, "false" ] == "true"
408
+
409
+ fails_now = tdriver_get_sequential_fails
410
+ fail_treshold = TDriver::Parameter[ :runner_sequence_treshold, 1 ].to_i
411
+ skip_text = "Not run due to sequential failures over treshold (#{ fail_treshold })."
412
+ test_skipped = fails_now > fail_treshold
413
+
414
+ end
415
+
416
+ if !test_skipped
417
+ if TDriver::Parameter[ :runner_skip_enabled, "false" ] == "true"
288
418
 
289
- skip_treshold = MobyUtil::Parameter[ :runner_skip_treshold, "5" ].to_i
419
+ fail_execs = tdriver_get_current_by_status( "failed" )
420
+ pass_execs = tdriver_get_current_by_status( "passed" )
421
+
422
+ fail_execs = fail_execs.respond_to?( :count ) ? fail_execs.count : 0
423
+ pass_execs = pass_execs.respond_to?( :count ) ? pass_execs.count : 0
424
+
425
+ skip_treshold = TDriver::Parameter[ :runner_skip_treshold, "5" ].to_i
426
+
427
+ if fail_execs + pass_execs >= skip_treshold and fail_execs + pass_execs > 0
428
+ skip_rate = TDriver::Parameter[ :runner_skip_fail_rate, "66" ].to_i / 100.0
429
+ skip_text = "Not run due to consistent failures exceeding maximum fail rate(#{ skip_rate } %)."
430
+ test_skipped = fail_execs/(fail_execs + pass_execs).to_f >= skip_rate
431
+ end
290
432
 
291
- if fail_execs + pass_execs >= skip_treshold and fail_execs + pass_execs > 0
292
- skip_rate = MobyUtil::Parameter[ :runner_skip_fail_rate, "66" ].to_i / 100.0
293
- test_skipped = fail_execs/(fail_execs + pass_execs).to_f >= skip_rate
294
433
  end
295
-
296
434
  end
297
435
 
298
436
  if !test_skipped
@@ -313,8 +451,8 @@ begin
313
451
 
314
452
  else
315
453
 
316
- tdriver_report_log( "Not run due to consistent failures." )
317
- tdriver_report_set_test_case_status( MobyUtil::Parameter[ :runner_skip_status, "not run" ] )
454
+ tdriver_report_log( skip_text )
455
+ tdriver_report_set_test_case_status( TDriver::Parameter[ :runner_skip_status, "not run" ] )
318
456
 
319
457
  end
320
458
 
@@ -347,17 +485,26 @@ begin
347
485
  raise if PASSTHROUGH_EXCEPTIONS.include? $!.class
348
486
  add_error($!)
349
487
  end
350
- end
488
+ end
351
489
  @case_contents_array[current_index]=[@case_contents_array[current_index].at(0),@case_contents_array[current_index].at(1),@case_contents_array[current_index].at(2),@test_passed] if @case_contents_array!=nil && status==nil
352
490
  end
353
491
  result.add_run
354
492
  yield(FINISHED, name)
355
493
  end
494
+
356
495
  end
357
496
  class TestSuite
358
497
  include TDRunner::TDRunnerMonitor
359
498
  # Runs the tests and/or suites contained in this
360
499
  # TestSuite.
500
+
501
+ # Creates a new TestSuite with the given name.
502
+ def initialize(name="Unnamed TestSuite", test_case=nil)
503
+ @name = name
504
+ @tests = []
505
+ @test_case = test_case
506
+ end
507
+
361
508
  def parse_parameter_string(string)
362
509
  s = string
363
510
 
@@ -387,13 +534,15 @@ begin
387
534
  end
388
535
  def run(result,arguments=nil,case_contents_array=nil, current_index=nil,status=nil, &progress_block)
389
536
  yield(STARTED, name)
537
+ run_startup(result)
390
538
  @tests,@case_contents_array=randomize_test_cases(@tests,$tdrunner_parameters)
391
539
  @test_level_and_result=Array.new if @test_level_and_result==nil
392
540
  current_index=0
393
541
  previous_test_level=0
394
542
  previous_test_level_result=nil
395
543
  current_test_level=0
396
- @tests.each do |test|
544
+ @tests.each do |test|
545
+ record_test_to_recorder_profile('test_unit',test)
397
546
  parameters_arr=nil
398
547
  eval_parameters_arr=[]
399
548
  if @case_contents_array!=nil
@@ -450,8 +599,25 @@ begin
450
599
  current_index+=1
451
600
  end
452
601
  add_failed_testunit_tests($tdrunner_parameters, @case_contents_array)
602
+ run_shutdown(result)
453
603
  yield(FINISHED, name)
454
604
  end
605
+
606
+ private
607
+ def run_startup(result)
608
+ return if @test_case.nil? or !@test_case.respond_to?(:startup)
609
+
610
+ @test_case.startup
611
+
612
+ end
613
+
614
+ def run_shutdown(result)
615
+ return if @test_case.nil? or !@test_case.respond_to?(:shutdown)
616
+
617
+ @test_case.shutdown
618
+
619
+ end
620
+
455
621
  end
456
622
  end
457
623
  end
data/rakefile CHANGED
@@ -56,8 +56,7 @@ def make_spec
56
56
  s.add_dependency("testability-driver")
57
57
  s.add_dependency("rails", ">=2.3.5")
58
58
  s.add_dependency("zippy")
59
- s.add_dependency("sqlite3-ruby", ">=1.2.5")
60
-
59
+ s.add_dependency("sqlite3-ruby")
61
60
  end
62
61
  end
63
62
 
@@ -87,7 +86,7 @@ task :gem_install do
87
86
  puts "### Installing GEM #{GEM_NAME} ###"
88
87
  puts "#########################################################"
89
88
  tdrunner_gem = "tdrunner-#{@__gem_version}.gem"
90
- if /win/ =~ RUBY_PLATFORM
89
+ if /win/ =~ RUBY_PLATFORM || /mingw32/ =~ RUBY_PLATFORM
91
90
  cmd = "gem install pkg\\*.gem --LOCAL"
92
91
  else
93
92
  cmd = "gem install pkg/*.gem --LOCAL"
@@ -106,7 +105,7 @@ task :gem_uninstall do
106
105
  puts "#########################################################"
107
106
  tdrunner_gem = "tdrunner-#{@__gem_version}.gem"
108
107
  FileUtils.rm(Dir.glob('pkg/*gem'))
109
- if /win/ =~ RUBY_PLATFORM
108
+ if /win/ =~ RUBY_PLATFORM || /mingw32/ =~ RUBY_PLATFORM
110
109
  cmd = "del /F /Q pkg\\"
111
110
  failure = system(cmd)
112
111
  #raise "deleting #{GEM_NAME} in pkg folder failed" if (failure != true) or ($? != 0)
@@ -229,7 +229,7 @@ class ReportEditor::TestRun::CasesController < ApplicationController
229
229
  end
230
230
 
231
231
  def test_case_comment(test_case)
232
- pass_statuses=MobyUtil::Parameter[ :report_passed_statuses, "passed" ].split('|')
232
+ pass_statuses=TDriver::Parameter[ :report_passed_statuses, "passed" ].split('|')
233
233
  status=test_case[7].to_s
234
234
  comment=nil
235
235
  if pass_statuses.include?(status)==false
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testability-driver-runner
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- - 1
10
- version: 1.1.1
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Testability Driver team
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-12 00:00:00 Z
18
+ date: 2011-06-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: testability-driver
@@ -69,12 +69,10 @@ dependencies:
69
69
  requirements:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- hash: 21
72
+ hash: 3
73
73
  segments:
74
- - 1
75
- - 2
76
- - 5
77
- version: 1.2.5
74
+ - 0
75
+ version: "0"
78
76
  type: :runtime
79
77
  version_requirements: *id004
80
78
  description: Testability Driver test runner