最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

编写Python小程序来统计测试脚本的关键字

来源:动视网 责编:小采 时间:2020-11-27 14:35:30
文档

编写Python小程序来统计测试脚本的关键字

编写Python小程序来统计测试脚本的关键字:通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数、业务函数需要修改,那么势必要找出那些引用过这个被修改函数的地方,有些IDE支持全文查找和引用查找,而有些简单的可能就没有,因为日后要用到
推荐度:
导读编写Python小程序来统计测试脚本的关键字:通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数、业务函数需要修改,那么势必要找出那些引用过这个被修改函数的地方,有些IDE支持全文查找和引用查找,而有些简单的可能就没有,因为日后要用到


通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数、业务函数需要修改,那么势必要找出那些引用过这个被修改函数的地方,有些IDE支持全文查找和引用查找,而有些简单的可能就没有,因为日后要用到统计功能、和一些其它的需求,所以写了一个脚本。除了跟目录下全文查找引用过的文件外,还是支持统计查找到的数量,一次可以查找多个关键字,支持按主关键字来归类。

#encoding: utf-8 
import os 
import sys 
import re 
 
reload(sys) 
sys.setdefaultencoding("utf-8") 
 
short_exclude = [".svn", "sendbox"] ##不检查的文件、目录名 
long_exclude = [] ##不包含检查的文件、目录的完整路径 
extend_name = [".rb"] ##指定检查的文件后缀 
temp_key_words = [ 
 { 
 "key" : "#作者:", 
 "display" : "作者", 
 "times" : -1, 
 "match" : "include", 
 "primary_key" : True, 
 }, 
 { 
 "key" : "#[summary]", 
 "display" : "完成用例数", 
 "times" : -1, 
 "match" : "include", 
 }, 
 { 
 "key" : "File.expand_path", 
 "display" : "有状态行数", 
 "times" : -1, 
 "ignore_case" : True, 
 }, 
 { 
 "key" : "defs+test_", 
 "display" : "有效用例数", 
 "times" : -1, 
 "match" : "regex", 
 "ignore_case" : True, 
 }, 
 { 
 "key" : "#defs+test_", 
 "display" : "注释用例数", 
 "times" : -1, 
 "match" : "regex", 
 "ignore_case" : True, 
 }, 
] 
 
for kv in temp_key_words: 
 if not "key" in kv: 
 raise "以下的列表中没有【key】值!
%s" % kv 
 if not "key" in kv: 
 raise "以下的列表中没有【display】值!
%s" % kv 
 kv['times'] = kv.get('times', -1) ##默认为不检查次数 
 if kv.get("ignore_case", True)==False: ##默认忽略大小写 
 flag = 0 
 else: 
 flag = re.I 
 kv['pattern'] = re.compile(kv['key'], flag) 
 if kv.get("primary_key", False): 
 kv['times'] = 1 
import copy 
key_words = [] 
 
def deepcopy(objs): 
 t_list = [] 
 for obj in objs: 
 t_list.append(copy.copy(obj)) 
 return t_list 
 
def loop_case(root_dir): 
 t_sum = [] 
 print root_dir 
 sub_gen = os.listdir(root_dir) 
 for sub in sub_gen: 
 if sub in short_exclude: ##在不检查文件、目录范围中 
 continue 
 abs_path = os.path.join(root_dir, sub) 
 if long_exclude: 
 is_exclude = False 
 for exclude in long_exclude: 
 if exclude == abs_path[-len(exclude):]: 
 is_exclude = True 
 break 
 if is_exclude: 
 continue 
 print abs_path 
 if os.path.isdir(abs_path): 
 print "dir" 
 t_sum.extend(loop_case(abs_path)) 
 elif os.path.isfile(abs_path): 
 if not "." + abs_path.rsplit(".", 1)[1] in extend_name: ##不在后缀名 检查范围中 
 continue 
 print "file" 
 global key_words 
 key_words = deepcopy(temp_key_words) 
 t_sum.append(count_case(abs_path)) 
 return t_sum 
 
def count_case(abs_path): 
 t_dict = {} 
 with open(abs_path) as f: 
 for l in f: 
 l = l.strip() 
 match_rule(l) 
 index = 0 
 count_result = [0] * len(key_words) 
 for kv in key_words: 
 if 'primary_key' in kv: 
 t_dict['primary_key'] = kv.get('display') 
 t_dict['primary_key_value'] = kv.get('primary_key_value', "None") 
 count_result[index] = -1-kv['times'] 
 index += 1 
 t_dict['match_result'] = count_result 
 t_dict['file_path'] = abs_path 
 return t_dict 
 
def match_rule(line): 
 primary_key = None 
 for kv in key_words: 
 match = False 
 if kv['times']==0: ##检查次数已满,不再检查 
 continue 
 if kv.get('match', "") == "regex": ##指定了匹配方式为:正则 
 if kv['pattern'].match(line): ##匹配正则成功 
 match = True 
 else: ##默认匹配方式为: 包含 
 if kv['key'] in line: ##包含了指定字符串 
 match = True 
 if match: 
 if kv.get('primary_key', False): 
 kv['primary_key_value'] = line.split(kv['key'])[1].strip() 
# kv['primary_key'] = False 
 kv['times'] -= 1 ##匹配成功,同理剩余匹配的次数 -1 
 return primary_key 
 
def format_info(sum_list): 
 tip_list = [] 
 p_k_dict = {} 
 for d in sum_list: 
 p_k = d['primary_key_value'] 
 if p_k not in p_k_dict: 
 p_k_dict[p_k] = [0] * len(key_words) 
 temp_list = [] 
 m = d['match_result'] 
 temp_list.append("文件名称:%s
%s:%s
" % (d['file_path'], d['primary_key'], d['primary_key_value'])) 
 for i in range(len(m)): 
 if 'primary_key' in key_words[i]: 
 continue 
 else: 
 t_s = str(m[i]) 
 temp_list.append("%s:%s
" % (key_words[i]["display"], t_s)) 
 p_k_dict[p_k][i] += m[i] 
 tip_list.append("".join(temp_list)) 
 p_k_dict[p_k][0] += 1 
 tip_list.append("===========================主键统计分割线===============================") 
 total_dict = {} 
 for kv in key_words: 
 if 'primary_key' not in kv: 
 total_dict[kv['display']] = 0 
 total_dict['全部文件数'] = 0 
 for k,v in p_k_dict.items(): 
 temp_list = [] 
 temp_list.append("主键:%s
文件总数:%s
" % (k, v[0])) 
 for i in range(1, len(v)): 
 temp_list.append("%s:%s
" % (key_words[i]["display"], str(v[i]))) 
 total_dict[key_words[i]["display"]] += v[i] 
 tip_list.append("".join(temp_list)) 
 total_dict['全部文件数'] += v[0] 
 tip_list.append("===========================全部统计分割线===============================") 
 temp_list = [] 
 for k,v in total_dict.items(): 
 temp_list.append("全部%s:%s
" % (k,v)) 
 tip_list.append("".join(temp_list)) 
 tip_msg = "
".join(tip_list) 
 print tip_msg 
 open(r"sum_case.log", "w").write(tip_msg) 
 
if __name__=="__main__": 
 if len(sys.argv) > 1: 
 root_list = sys.argv[1:] 
 else: 
 root_list = [os.curdir] 
 sum_list = [] 
 for root_dir in root_list: 
 if os.path.exists(root_dir) and os.path.isdir(root_dir): 
 sum_list.extend(loop_case(root_dir)) 
 format_info(sum_list) 
 else: 
 print "给定的根目录无效
%s" % root_dir 

可以通过配置开头的设置来确定检查什么关键字,文件类型,过滤哪些文件和目录等

文档

编写Python小程序来统计测试脚本的关键字

编写Python小程序来统计测试脚本的关键字:通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数、业务函数需要修改,那么势必要找出那些引用过这个被修改函数的地方,有些IDE支持全文查找和引用查找,而有些简单的可能就没有,因为日后要用到
推荐度:
标签: 关键字 程序 统计
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top