class Actir::ParallelTests::Test::Result
Public Class Methods
any_test_failed?(result)
click to toggle source
判断是否有用例失败
# File lib/actir/parallel_tests/test/result.rb, line 161 def any_test_failed?(result) result[:exit_status] != 0 end
error_tests_name_reg()
click to toggle source
获取错误用例名的正则
# File lib/actir/parallel_tests/test/result.rb, line 166 def error_tests_name_reg /^Error:\s(test.+)\(.+\):/ end
fail_tests_name_reg_extra()
click to toggle source
获取失败用例名的正则[补充场景]
# File lib/actir/parallel_tests/test/result.rb, line 176 def fail_tests_name_reg_extra /^(test.+)\(.+\)/ end
failure_or_error_switch_off()
click to toggle source
测试用例执行报错信息截止正则
# File lib/actir/parallel_tests/test/result.rb, line 206 def failure_or_error_switch_off /^===============================================================================$/ end
failure_or_error_switch_on()
click to toggle source
测试用例执行报错信息开头正则
# File lib/actir/parallel_tests/test/result.rb, line 201 def failure_or_error_switch_on /^Failure:|^Error:/ end
failure_tests_file_reg()
click to toggle source
获取失败用例文件名的正则
# 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()
click to toggle source
获取失败用例文件名的正则[补充场景]
# 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()
click to toggle source
获取失败用例名的正则
# File lib/actir/parallel_tests/test/result.rb, line 171 def failure_tests_name_reg /^Failure:\s(test.+)\(.+\)/ end
file_suite_case_reg()
click to toggle source
从执行结果中获取文件/测试套/测试用例的名称
# 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()
click to toggle source
获取执行失败的用例
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
通过结果判断失败用例,获取失败用例的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
# 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)
click to toggle source
# 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)
click to toggle source
通过结果判断测试套的详细信息
将测试套和测试用例的详细信息写入全局变量$testsuites中
# 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)
click to toggle source
因为测试用例名称/测试套名称有可能重复,所以采用 测试文件名称:测试用例名称 的方式作为测试用例名称的唯一标识 也可用于测试套名称组合
# 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)
click to toggle source
# 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()
click to toggle source
测试套信息截止正则
# File lib/actir/parallel_tests/test/result.rb, line 196 def test_info_swtich_off /^\[suite end\]/ end
test_info_swtich_on()
click to toggle source
测试套信息开头正则
# File lib/actir/parallel_tests/test/result.rb, line 191 def test_info_swtich_on /^\[suite start\]/ end