testability-driver-runner 1.1.1 → 1.2.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.
- data/lib/tdrunner.rb +5 -1
- data/lib/tdrunner_command_tool.rb +1 -1
- data/lib/tdrunner_cucumber.rb +1 -0
- data/lib/tdrunner_monitor.rb +23 -0
- data/lib/tdrunner_profile.rb +16 -0
- data/lib/tdrunner_test_unit.rb +182 -16
- data/rakefile +3 -4
- data/websi/app/controllers/report_editor/test_run/cases_controller.rb +1 -1
- metadata +8 -10
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.
|
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 =
|
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+/, ' ')})"
|
data/lib/tdrunner_cucumber.rb
CHANGED
@@ -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
|
data/lib/tdrunner_monitor.rb
CHANGED
@@ -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
|
data/lib/tdrunner_profile.rb
CHANGED
@@ -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
|
data/lib/tdrunner_test_unit.rb
CHANGED
@@ -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
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
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
|
-
|
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(
|
317
|
-
tdriver_report_set_test_case_status(
|
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
|
-
|
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"
|
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=
|
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:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 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-
|
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:
|
72
|
+
hash: 3
|
73
73
|
segments:
|
74
|
-
-
|
75
|
-
|
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
|