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
获取错误用例名的正则.
-
.fail_tests_name_reg_extra ⇒ Object
获取失败用例名的正则[补充场景].
-
.failure_or_error_switch_off ⇒ Object
测试用例执行报错信息截止正则.
-
.failure_or_error_switch_on ⇒ Object
测试用例执行报错信息开头正则.
-
.failure_tests_file_reg ⇒ Object
获取失败用例文件名的正则.
-
.failure_tests_file_reg_extra ⇒ Object
获取失败用例文件名的正则[补充场景].
-
.failure_tests_name_reg ⇒ Object
获取失败用例名的正则.
-
.file_suite_case_reg ⇒ Object
从执行结果中获取文件/测试套/测试用例的名称.
-
.get_failed_testcase ⇒ Object
获取执行失败的用例.
- .get_run_test_info(test_result) ⇒ Object
- .get_testcase_from_unique(unique_testname) ⇒ Object
-
.get_testfailed_info(test_result) ⇒ Object
通过结果判断失败用例,获取失败用例的详细信息.
- .get_testfile_from_unique(unique_testname) ⇒ Object
-
.get_testsuite_detail(test_result, mode = :runner) ⇒ Object
通过结果判断测试套的详细信息.
-
.get_unique_testname(testfile, test) ⇒ Object
因为测试用例名称/测试套名称有可能重复,所以采用 测试文件名称:测试用例名称 的方式作为测试用例名称的唯一标识 也可用于测试套名称组合.
- .record_detail(test_result) ⇒ Object
-
.test_info_swtich_off ⇒ Object
测试套信息截止正则.
-
.test_info_swtich_on ⇒ Object
测试套信息开头正则.
Class Method Details
.any_test_failed?(result) ⇒ Boolean
判断是否有用例失败
148 149 150 |
# File 'lib/actir/parallel_tests/test/result.rb', line 148 def any_test_failed?(result) result[:exit_status] != 0 end |
.error_tests_name_reg ⇒ Object
获取错误用例名的正则
153 154 155 |
# File 'lib/actir/parallel_tests/test/result.rb', line 153 def error_tests_name_reg /^Error:\s(test.+)\(.+\):/ end |
.fail_tests_name_reg_extra ⇒ Object
获取失败用例名的正则[补充场景]
163 164 165 |
# File 'lib/actir/parallel_tests/test/result.rb', line 163 def fail_tests_name_reg_extra /^(test.+)\(.+\)/ end |
.failure_or_error_switch_off ⇒ Object
测试用例执行报错信息截止正则
193 194 195 |
# File 'lib/actir/parallel_tests/test/result.rb', line 193 def failure_or_error_switch_off /^===============================================================================$/ end |
.failure_or_error_switch_on ⇒ Object
测试用例执行报错信息开头正则
188 189 190 |
# File 'lib/actir/parallel_tests/test/result.rb', line 188 def failure_or_error_switch_on /^Failure:|^Error:/ end |
.failure_tests_file_reg ⇒ Object
获取失败用例文件名的正则
168 169 170 |
# File 'lib/actir/parallel_tests/test/result.rb', line 168 def failure_tests_file_reg /(.+\/test.+rb):\d+:in\s`.+'/ end |
.failure_tests_file_reg_extra ⇒ Object
获取失败用例文件名的正则[补充场景]
173 174 175 |
# File 'lib/actir/parallel_tests/test/result.rb', line 173 def failure_tests_file_reg_extra /^(test.+rb):\d+:in\s`.+'/ end |
.failure_tests_name_reg ⇒ Object
获取失败用例名的正则
158 159 160 |
# File 'lib/actir/parallel_tests/test/result.rb', line 158 def failure_tests_name_reg /^Failure:\s(test.+)\(.+\)/ end |
.file_suite_case_reg ⇒ Object
从执行结果中获取文件/测试套/测试用例的名称
143 144 145 |
# File 'lib/actir/parallel_tests/test/result.rb', line 143 def file_suite_case_reg /^Loaded\ssuite\s(.*)\nStarted\n\[suite start\]([^\.]*)\[suite end\]$/ end |
.get_failed_testcase ⇒ Object
获取执行失败的用例
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/actir/parallel_tests/test/result.rb', line 29 def get_failed_testcase failed_case = [] $testsuites.each do |testsuite| testcases = testsuite[:testcases] testcases.each do |testcase| if testcase[:success] == false failed_case << testcase[:testcase_name] end end end failed_case end |
.get_run_test_info(test_result) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/actir/parallel_tests/test/result.rb', line 66 def get_run_test_info(test_result) output = test_result[:stdout] # output.scan(/^(\[suite start\])([^\.]*)(\[suite end\])$/).each do |suite| output.scan(file_suite_case_reg).each do |suite| filename = suite[0] testsuite = suite[1].scan(/^(suitname:\s*)([\d\w]*)/)[0][1] testsuite_name = get_unique_testname(filename, testsuite) cases = suite[1].scan(/^(testcase:\s*)([\d\w]*)/).inject([]) do |cases,testcase| testcase_name = get_unique_testname(filename, testcase[1]) cases << {:testcase_name => testcase_name, :success => true, :detail => nil} end # 如果testsuites中已存在此用例的信息,说明这个用例执行了rerun,就不再次添加了 is_case_exist = $testsuites.inject(false) do |is_case_exist, testsuite| if testsuite.has_value?(testsuite_name) is_case_exist = true break end is_case_exist end if(is_case_exist == false) testsuite = {:testsuite_name => testsuite_name, :testcases =>cases} $testsuites << testsuite end end end |
.get_testcase_from_unique(unique_testname) ⇒ Object
216 217 218 219 |
# File 'lib/actir/parallel_tests/test/result.rb', line 216 def get_testcase_from_unique(unique_testname) unique_testname =~ /(.*)\:(.*)/ $2 end |
.get_testfailed_info(test_result) ⇒ Object
通过结果判断失败用例,获取失败用例的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/actir/parallel_tests/test/result.rb', line 97 def get_testfailed_info(test_result) result_array = test_result[:stdout].split("\n") failure_detail_hash = {} testfile = "" testcase = "" detail = "" testcase_name = "" 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) || (result =~ fail_tests_name_reg_extra) testcase = $1 end # 记录报错用例文件名称 if (result =~ failure_tests_file_reg) || (result =~ failure_tests_file_reg_extra) #范例:"testcode/test_tt/test_hehe.rb:8:in `xxxx'" testfile = $1 end # 合并用例名称和文件名称 testcase_name = get_unique_testname(testfile, testcase) if testcase_name != "" && detail != "" && record_detail_switch == 0 failure_detail_hash[testcase_name] = detail testcase = "" testfile = "" detail = "" testcase_name = "" end end failure_detail_hash end |
.get_testfile_from_unique(unique_testname) ⇒ Object
211 212 213 214 |
# File 'lib/actir/parallel_tests/test/result.rb', line 211 def get_testfile_from_unique(unique_testname) unique_testname =~ /(.*)\:(.*)/ $1 end |
.get_testsuite_detail(test_result, mode = :runner) ⇒ Object
通过结果判断测试套的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
13 14 15 16 17 18 19 20 21 22 23 24 |
# 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) #如果有用例失败,则记录详细信息,否则不需要 if any_test_failed?(test_result) record_detail(test_result) end else record_detail(test_result) end end |
.get_unique_testname(testfile, test) ⇒ Object
因为测试用例名称/测试套名称有可能重复,所以采用 测试文件名称:测试用例名称 的方式作为测试用例名称的唯一标识 也可用于测试套名称组合
199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/actir/parallel_tests/test/result.rb', line 199 def get_unique_testname(testfile, test) if (test != "" || test != nil) && (testfile != "" || testfile != nil) # 判断测试文件名称是否包含.rb后缀,如果没有则加上 unless testfile =~ /.*\.rb$/ testfile += ".rb" end return testfile + ":" + test else return "" end end |
.record_detail(test_result) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/actir/parallel_tests/test/result.rb', line 42 def record_detail(test_result) failure_detail_hash = get_testfailed_info(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 |
.test_info_swtich_off ⇒ Object
测试套信息截止正则
183 184 185 |
# File 'lib/actir/parallel_tests/test/result.rb', line 183 def test_info_swtich_off /^\[suite end\]/ end |
.test_info_swtich_on ⇒ Object
测试套信息开头正则
178 179 180 |
# File 'lib/actir/parallel_tests/test/result.rb', line 178 def test_info_swtich_on /^\[suite start\]/ end |