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
判断是否有用例失败
161 162 163 |
# File 'lib/actir/parallel_tests/test/result.rb', line 161 def any_test_failed?(result) result[:exit_status] != 0 end |
.error_tests_name_reg ⇒ Object
获取错误用例名的正则
166 167 168 |
# File 'lib/actir/parallel_tests/test/result.rb', line 166 def error_tests_name_reg /^Error:\s(test.+)\(.+\):/ end |
.fail_tests_name_reg_extra ⇒ Object
获取失败用例名的正则[补充场景]
176 177 178 |
# File 'lib/actir/parallel_tests/test/result.rb', line 176 def fail_tests_name_reg_extra /^(test.+)\(.+\)/ end |
.failure_or_error_switch_off ⇒ Object
测试用例执行报错信息截止正则
206 207 208 |
# File 'lib/actir/parallel_tests/test/result.rb', line 206 def failure_or_error_switch_off /^===============================================================================$/ end |
.failure_or_error_switch_on ⇒ Object
测试用例执行报错信息开头正则
201 202 203 |
# File 'lib/actir/parallel_tests/test/result.rb', line 201 def failure_or_error_switch_on /^Failure:|^Error:/ end |
.failure_tests_file_reg ⇒ Object
获取失败用例文件名的正则
181 182 183 |
# File 'lib/actir/parallel_tests/test/result.rb', line 181 def failure_tests_file_reg /(.+\/test.+rb):\d+:in\s`.+'/ end |
.failure_tests_file_reg_extra ⇒ Object
获取失败用例文件名的正则[补充场景]
186 187 188 |
# File 'lib/actir/parallel_tests/test/result.rb', line 186 def failure_tests_file_reg_extra /^(test.+rb):\d+:in\s`.+'/ end |
.failure_tests_name_reg ⇒ Object
获取失败用例名的正则
171 172 173 |
# File 'lib/actir/parallel_tests/test/result.rb', line 171 def failure_tests_name_reg /^Failure:\s(test.+)\(.+\)/ end |
.file_suite_case_reg ⇒ Object
从执行结果中获取文件/测试套/测试用例的名称
156 157 158 |
# File 'lib/actir/parallel_tests/test/result.rb', line 156 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
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/actir/parallel_tests/test/result.rb', line 79 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
229 230 231 232 |
# File 'lib/actir/parallel_tests/test/result.rb', line 229 def get_testcase_from_unique(unique_testname) unique_testname =~ /(.*)\:(.*)/ $2 end |
.get_testfailed_info(test_result) ⇒ Object
通过结果判断失败用例,获取失败用例的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
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 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/actir/parallel_tests/test/result.rb', line 110 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
224 225 226 227 |
# File 'lib/actir/parallel_tests/test/result.rb', line 224 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
因为测试用例名称/测试套名称有可能重复,所以采用 测试文件名称:测试用例名称 的方式作为测试用例名称的唯一标识 也可用于测试套名称组合
212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/actir/parallel_tests/test/result.rb', line 212 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 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# 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 # 反向再检查一遍是否有$testsuites种未记录的失败用例 miss_failed_case = [] if failure_detail_hash.size > 0 failure_detail_hash.each do |testcase_failure, detail| testcase = {:testcase_name => testcase_failure, :success => false, :detail => detail} #从hash表中移除 failure_detail_hash.delete(testcase_failure) miss_failed_case << testcase end testsuite = {:testsuite_name => "miss_failed_case", :testcases => miss_failed_case} $testsuites << testsuite end end |
.test_info_swtich_off ⇒ Object
测试套信息截止正则
196 197 198 |
# File 'lib/actir/parallel_tests/test/result.rb', line 196 def test_info_swtich_off /^\[suite end\]/ end |
.test_info_swtich_on ⇒ Object
测试套信息开头正则
191 192 193 |
# File 'lib/actir/parallel_tests/test/result.rb', line 191 def test_info_swtich_on /^\[suite start\]/ end |