Class: Actir::ParallelTests::Test::Result
- Inherits:
-
Object
- Object
- Actir::ParallelTests::Test::Result
- Defined in:
- lib/actir/parallel_tests/test/result.rb
Class Method Summary collapse
-
.any_test_failed?(result) ⇒ Boolean
判断是否有用例失败.
-
.error_tests_name_reg ⇒ Object
获取错误用例名的正则.
- .failure_or_error_switch_off ⇒ Object
- .failure_or_error_switch_on ⇒ Object
-
.failure_tests_name_reg ⇒ Object
获取失败用例名的正则.
- .get_run_test_info(test_result) ⇒ Object
-
.get_testfailed_detail(test_result) ⇒ Object
通过结果判断失败用例,获取失败用例的详细信息.
-
.get_testsuite_detail(test_result, mode = :runner) ⇒ Object
通过结果判断测试套的详细信息.
- .test_info_swtich_off ⇒ Object
- .test_info_swtich_on ⇒ Object
Class Method Details
.any_test_failed?(result) ⇒ Boolean
判断是否有用例失败
105 106 107 |
# File 'lib/actir/parallel_tests/test/result.rb', line 105 def any_test_failed?(result) result[:exit_status] != 0 end |
.error_tests_name_reg ⇒ Object
获取错误用例名的正则
110 111 112 |
# File 'lib/actir/parallel_tests/test/result.rb', line 110 def error_tests_name_reg /^Error:\s(test.+)\(.+\):/ end |
.failure_or_error_switch_off ⇒ Object
131 132 133 |
# File 'lib/actir/parallel_tests/test/result.rb', line 131 def failure_or_error_switch_off /^===============================================================================$/ end |
.failure_or_error_switch_on ⇒ Object
127 128 129 |
# File 'lib/actir/parallel_tests/test/result.rb', line 127 def failure_or_error_switch_on /^Failure:|^Error:/ end |
.failure_tests_name_reg ⇒ Object
获取失败用例名的正则
115 116 117 |
# File 'lib/actir/parallel_tests/test/result.rb', line 115 def failure_tests_name_reg /^Failure:\s(test.+)\(.+\)/ end |
.get_run_test_info(test_result) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/actir/parallel_tests/test/result.rb', line 45 def get_run_test_info(test_result) output = test_result[:stdout] output.scan(/^(\[suite start\])([^\.]*)(\[suite end\])$/).each do |suite| suitename = suite[1].scan(/^(suitname:\s*)([\d\w]*)/)[0][1] cases = suite[1].scan(/^(testcase:\s*)([\d\w]*)/).inject([]) do |cases,testcase| cases << {:testcase_name => testcase[1], :success => true, :detail => nil} end # 如果testsuites中已存在此用例的信息,说明这个用例执行了rerun,就不再次添加了 is_case_exist = $testsuites.inject(false) do |is_case_exist, testsuite| if testsuite.has_value?(suitename) is_case_exist = true break end is_case_exist end if(is_case_exist == false) testsuite = {:testsuite_name => suitename, :testcases =>cases} $testsuites << testsuite end end end |
.get_testfailed_detail(test_result) ⇒ Object
通过结果判断失败用例,获取失败用例的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/actir/parallel_tests/test/result.rb', line 72 def get_testfailed_detail(test_result) result_array = test_result[:stdout].split("\n") failure_detail_hash = {} testcase = "" detail = "" record_detail_switch = 0 result_array.each do |result| record_detail_switch = 0 if result =~ failure_or_error_switch_off #遇到错误信息,开启记录错误信息开关 record_detail_switch = 1 if result =~failure_or_error_switch_on if record_detail_switch == 1 detail += result + "\n" end if (result =~ failure_tests_name_reg) || (result =~ error_tests_name_reg) testcase = $1 end if testcase != "" && detail != "" && record_detail_switch == 0 failure_detail_hash[testcase] = detail testcase = "" detail = "" end end failure_detail_hash end |
.get_testsuite_detail(test_result, mode = :runner) ⇒ Object
通过结果判断测试套的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/actir/parallel_tests/test/result.rb', line 13 def get_testsuite_detail(test_result, mode = :runner) $testsuites = [] unless $testsuites if mode == :runner get_run_test_info(test_result) end #如果有用例失败,则记录详细信息,否则不需要 if any_test_failed?(test_result) failure_detail_hash = get_testfailed_detail(test_result) $testsuites.each do |testsuite| testcases = testsuite[:testcases] testcases.each do |testcase| #标识用例是否执行失败 fail_flag = 0 failure_detail_hash.each do |testcase_failure, detail| if testcase_failure == testcase[:testcase_name] testcase[:success] = false testcase[:detail] = detail fail_flag = 1 #从hash表中移除 failure_detail_hash.delete(testcase_failure) end end if fail_flag == 0 testcase[:success] = true testcase[:detail] = nil end end end end end |
.test_info_swtich_off ⇒ Object
123 124 125 |
# File 'lib/actir/parallel_tests/test/result.rb', line 123 def test_info_swtich_off /^\[suite end\]/ end |
.test_info_swtich_on ⇒ Object
119 120 121 |
# File 'lib/actir/parallel_tests/test/result.rb', line 119 def test_info_swtich_on /^\[suite start\]/ end |