国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

編寫Python小程序來統計測試腳本的關鍵字

2020-01-04 17:38:03
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了編寫Python小程序來統計測試腳本的關鍵字的方法,文中的實例不僅可以統計關鍵字數量,還可以按主關鍵字來歸類,需要的朋友可以參考下
 

通常自動化測試項目到了一定的程序,編寫的測試代碼自然就會很多,如果很早已經編寫的測試腳本現在某些基礎函數、業務函數需要修改,那么勢必要找出那些引用過這個被修改函數的地方,有些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_",     "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 

可以通過配置開頭的設置來確定檢查什么關鍵字,文件類型,過濾哪些文件和目錄等


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来安县| 全椒县| 平乐县| 西青区| 五台县| 精河县| 平果县| 东源县| 湟中县| 五原县| 绥宁县| 福安市| 沁阳市| 苍梧县| 依兰县| 英吉沙县| 祥云县| 中方县| 平山县| 简阳市| 平阳县| 贵阳市| 花莲县| 浦东新区| 丹凤县| 台北市| 启东市| 陇西县| 鄢陵县| 赣榆县| 武邑县| 台前县| 石景山区| 晋城| 托克逊县| 绥德县| 平和县| 龙川县| 灵川县| 孟津县| 太仓市|