最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

編寫Python小程序來統(tǒng)計測試腳本的關鍵字

 更新時間:2016年03月12日 17:01:00   作者:像風一樣的自由  
這篇文章主要介紹了編寫Python小程序來統(tǒng)計測試腳本的關鍵字的方法,文中的實例不僅可以統(tǒng)計關鍵字數(shù)量,還可以按主關鍵字來歸類,需要的朋友可以參考下

通常自動化測試項目到了一定的程序,編寫的測試代碼自然就會很多,如果很早已經(jīng)編寫的測試腳本現(xiàn)在某些基礎函數(shù)、業(yè)務函數(shù)需要修改,那么勢必要找出那些引用過這個被修改函數(shù)的地方,有些IDE支持全文查找和引用查找,而有些簡單的可能就沒有,因為日后要用到統(tǒng)計功能、和一些其它的需求,所以寫了一個腳本。除了跟目錄下全文查找引用過的文件外,還是支持統(tǒng)計查找到的數(shù)量,一次可以查找多個關鍵字,支持按主關鍵字來歸類。

#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" : "完成用例數(shù)", 
    "times" : -1, 
    "match" : "include", 
  },   
  { 
    "key" : "File.expand_path", 
    "display" : "有狀態(tài)行數(shù)", 
    "times" : -1, 
    "ignore_case" : True, 
  },   
  { 
    "key" : "def\s+test_", 
    "display" : "有效用例數(shù)", 
    "times" : -1, 
    "match" : "regex", 
    "ignore_case" : True, 
  },   
  { 
    "key" : "#def\s+test_", 
    "display" : "注釋用例數(shù)", 
    "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)  ##默認為不限制檢查次數(shù)    
  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: ##檢查次數(shù)已滿,不再檢查 
      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      ##匹配成功,同理剩余匹配的次數(shù) -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("===========================主鍵統(tǒng)計分割線===============================") 
  total_dict = {} 
  for kv in key_words: 
    if 'primary_key' not in kv: 
      total_dict[kv['display']] = 0 
  total_dict['全部文件數(shù)'] = 0 
  for k,v in p_k_dict.items(): 
    temp_list = [] 
    temp_list.append("主鍵:%s\n文件總數(shù):%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['全部文件數(shù)'] += v[0] 
  tip_list.append("===========================全部統(tǒng)計分割線===============================") 
  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 

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

相關文章

  • python爬蟲爬取微博評論案例詳解

    python爬蟲爬取微博評論案例詳解

    這篇文章主要介紹了python爬蟲爬取微博評論,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • pygame實現(xiàn)一個類似滿天星游戲流程詳解

    pygame實現(xiàn)一個類似滿天星游戲流程詳解

    這篇文章主要介紹了使用pygame來編寫類滿天星游戲的全記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • 新手常見6種的python報錯及解決方法

    新手常見6種的python報錯及解決方法

    這篇文章主要為大家詳細介紹了新手常見6種的python報錯及解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python寫代碼的七條重要技巧介紹

    Python寫代碼的七條重要技巧介紹

    大家好,本篇文章主要講的是Python寫代碼的七條重要技巧介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Python多線程處理實例詳解【單進程/多進程】

    Python多線程處理實例詳解【單進程/多進程】

    這篇文章主要介紹了Python多線程處理,結合實例形式總結分析了Python單進程、多進程、多線程等相關操作技巧與注意事項,需要的朋友可以參考下
    2019-01-01
  • python爬蟲 urllib模塊url編碼處理詳解

    python爬蟲 urllib模塊url編碼處理詳解

    這篇文章主要介紹了python爬蟲 urllib模塊url編碼處理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python連接Mysql進行增刪改查的示例代碼

    Python連接Mysql進行增刪改查的示例代碼

    這篇文章主要介紹了Python連接Mysql進行增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python模板的使用詳細講解

    Python模板的使用詳細講解

    Django 模板是使用 Django 模板語言標記的一個文本文檔或Python字符串。模板引擎可以識別和解釋一些構造。主要是變量和標簽。模板是通過上下文來渲染的。渲染用變量的值替換變量,變量的值在上下文中查找,并執(zhí)行標簽。其他的一切都按原樣輸出
    2022-10-10
  • Python樹的鏡像的實現(xiàn)示例

    Python樹的鏡像的實現(xiàn)示例

    樹的鏡像是指將樹的每個節(jié)點的左右子樹交換,得到一棵新的樹,本文主要介紹了Python樹的鏡像的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • pytorch MSELoss計算平均的實現(xiàn)方法

    pytorch MSELoss計算平均的實現(xiàn)方法

    這篇文章主要介紹了pytorch MSELoss計算平均的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

科技| 沂南县| 南溪县| 富民县| 新疆| 新津县| 成武县| 改则县| 衡水市| 桐梓县| 沛县| 开化县| 务川| 永寿县| 湖南省| 阿坝县| 黔西| 安达市| 鹤岗市| 嘉定区| 上饶县| 宣化县| 刚察县| 井研县| 台湾省| 云安县| 孙吴县| 泌阳县| 尖扎县| 邢台市| 淳安县| 平阳县| 莒南县| 宣恩县| 江达县| 东乌珠穆沁旗| 积石山| 江山市| 深州市| 辽阳县| 绥芬河市|