• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 24次浏览 已收录 0个评论

通常自动化测试项目到了一定的程序,编写的测试代码自然就会很多,如果很早已经编写的测试脚本现在某些基础函数、业务函数需要修改,那么势必要找出那些引用过这个被修改函数的地方,有些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" : "def\s+test_",     "display" : "有效用例数",     "times" : -1,     "match" : "regex",     "ignore_case" : True,   },     {     "key" : "#def\s+test_<a>本文来源gao*daima.com搞@代#码&网6</a>",     "display" : "注释用例数",     "times" : -1,     "match" : "regex",     "ignore_case" : True,   },   ]  for kv in temp_key_words:   if not "key" in kv:     raise "以下的列表中没有【key】值!\n%s" % kv   if not "key" in kv:     raise "以下的列表中没有【display】值!\n%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\n%s:%s\n" % (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\n" % (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\n文件总数:%s\n" % (k, v[0]))     for i in range(1, len(v)):       temp_list.append("%s:%s\n" % (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\n" % (k,v))   tip_list.append("".join(temp_list))   tip_msg = "\n".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 "给定的根目录无效\n%s" % root_dir 

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:编写Python小程序来统计测试脚本的关键字
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址