python提效小工具之統(tǒng)計(jì)xmind用例數(shù)量(源碼)
使用Python讀取解析xmind文件,一鍵統(tǒng)計(jì)測(cè)試用例數(shù)量。
問題:做測(cè)試的朋友們經(jīng)常會(huì)用到xmind這個(gè)工具來梳理測(cè)試點(diǎn)或?qū)憸y(cè)試用例,但是xmind8沒有自帶的統(tǒng)計(jì)測(cè)試用例,其他版本的xmind有些自帶節(jié)點(diǎn)數(shù)量統(tǒng)計(jì)功能,但也也不會(huì)累計(jì)最終的數(shù)量,導(dǎo)致統(tǒng)計(jì)測(cè)試工作量比較困難。
解決方法:利用python開發(fā)小工具,實(shí)現(xiàn)同一份xmind文件中一個(gè)或多個(gè)sheet頁的用例數(shù)量統(tǒng)計(jì)功能。
一、源碼
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'zhongxintao' import tkinter as tk from tkinter import filedialog, messagebox from xmindparser import xmind_to_dict import xmind class ParseXmind: def __init__(self, root): self.count = 0 self.case_fail = 0 self.case_success = 0 self.case_block = 0 self.case_priority = 0 # total匯總用 self.total_cases = 0 self.total_success = 0 self.total_fail = 0 self.total_block = 0 self.toal_case_priority = 0 # 設(shè)置彈框標(biāo)題、初始位置、默認(rèn)大小 root.title(u'xmind文件解析及用例統(tǒng)計(jì)工具') width = 760 height = 600 xscreen = root.winfo_screenwidth() yscreen = root.winfo_screenheight() xmiddle = (xscreen - width) / 2 ymiddle = (yscreen - height) / 2 root.geometry('%dx%d+%d+%d' % (width, height, xmiddle, ymiddle)) # 設(shè)置2個(gè)Frame self.frm1 = tk.Frame(root) self.frm2 = tk.Frame(root) # 設(shè)置彈框布局 self.frm1.grid(row=1, padx='20', pady='20') self.frm2.grid(row=2, padx='30', pady='30') self.but_upload = tk.Button(self.frm1, text=u'上傳xmind文件', command=self.upload_files, bg='#dfdfdf') self.but_upload.grid(row=0, column=0, pady='10') self.text = tk.Text(self.frm1, width=55, height=10, bg='#f0f0f0') self.text.grid(row=1, column=0) self.but2 = tk.Button(self.frm2, text=u"開始統(tǒng)計(jì)", command=self.new_lines, bg='#dfdfdf') self.but2.grid(row=0, columnspan=6, pady='10') self.label_file = tk.Label(self.frm2, text=u"文件名", relief='groove', borderwidth='2', width=25, bg='#FFD0A2') self.label_file.grid(row=1, column=0) self.label_case = tk.Label(self.frm2, text=u"用例數(shù)", relief='groove', borderwidth='2', width=10, bg='#FFD0A2').grid(row=1, column=1) self.label_pass = tk.Label(self.frm2, text=u"成功", relief='groove', borderwidth='2', width=10, bg='#FFD0A2').grid(row=1, column=2) self.label_fail = tk.Label(self.frm2, text=u"失敗", relief='groove', borderwidth='2', width=10, bg='#FFD0A2').grid(row=1, column=3) self.label_block = tk.Label(self.frm2, text=u"阻塞", relief='groove', borderwidth='2', width=10, bg='#FFD0A2').grid(row=1, column=4) self.label_case_priority = tk.Label(self.frm2, text="p0case", relief='groove', borderwidth='2', width=10, bg='#FFD0A2').grid(row=1, column=5) def count_case(self, li): """統(tǒng)計(jì)xmind中的用例數(shù)""" for i in range(len(li)): if li[i].__contains__('topics'): # 帶topics標(biāo)簽表示有子標(biāo)題,遞歸執(zhí)行方法 self.count_case(li[i]['topics']) # 不帶topics表示無子標(biāo)題,此級(jí)別即是用例 else: # 有標(biāo)記成功或失敗時(shí)會(huì)有makers標(biāo)簽 if li[i].__contains__('makers'): for mark in li[i]['makers']: # 成功 if mark == "symbol-right": self.case_success += 1 # 失敗 elif mark == "symbol-wrong": self.case_fail += 1 # 阻塞 elif mark == "symbol-attention": self.case_block += 1 # 優(yōu)先級(jí) elif mark == "priority-1": self.case_priority += 1 # 用例總數(shù) self.count += 1 def new_line(self, filename, row_number): """用例統(tǒng)計(jì)表新增一行""" # sheets是一個(gè)list,可包含多sheet頁 sheets = xmind_to_dict(filename) # 調(diào)用此方法,將xmind轉(zhuǎn)成字典 for sheet in sheets: print(sheet) # 字典的值sheet['topic']['topics']是一個(gè)list my_list = sheet['topic']['topics'] print(my_list) self.count_case(my_list) # 插入一行統(tǒng)計(jì)數(shù)據(jù) lastname = filename.split('/') self.label_file = tk.Label(self.frm2, text=lastname[-1], relief='groove', borderwidth='2', width=25) self.label_file.grid(row=row_number, column=0) self.label_case = tk.Label(self.frm2, text=self.count, relief='groove', borderwidth='2', width=10) self.label_case.grid(row=row_number, column=1) self.label_pass = tk.Label(self.frm2, text=self.case_success, relief='groove', borderwidth='2', width=10) self.label_pass.grid(row=row_number, column=2) self.label_fail = tk.Label(self.frm2, text=self.case_fail, relief='groove', borderwidth='2', width=10) self.label_fail.grid(row=row_number, column=3) self.label_block = tk.Label(self.frm2, text=self.case_block, relief='groove', borderwidth='2', width=10) self.label_block.grid(row=row_number, column=4) self.label_case_priority = tk.Label(self.frm2, text=self.case_priority, relief='groove', borderwidth='2', width=10) self.label_case_priority.grid(row=row_number, column=5) self.total_cases += self.count self.total_success += self.case_success self.total_fail += self.case_fail self.total_block += self.case_block self.toal_case_priority += self.case_priority def new_lines(self): """用例統(tǒng)計(jì)表新增多行""" # 從text中獲取所有行 lines = self.text.get(1.0, tk.END) row_number = 2 # 分隔成每行 for line in lines.splitlines(): if line == '': break print(line) self.new_line(line, row_number) row_number += 1 # total匯總行 self.label_file = tk.Label(self.frm2, text='total', relief='groove', borderwidth='2', width=25) self.label_file.grid(row=row_number, column=0) self.label_case = tk.Label(self.frm2, text=self.total_cases, relief='groove', borderwidth='2', width=10) self.label_case.grid(row=row_number, column=1) self.label_pass = tk.Label(self.frm2, text=self.total_success, relief='groove', borderwidth='2', width=10) self.label_pass.grid(row=row_number, column=2) self.label_fail = tk.Label(self.frm2, text=self.total_fail, relief='groove', borderwidth='2', width=10) self.label_fail.grid(row=row_number, column=3) self.label_block = tk.Label(self.frm2, text=self.total_block, relief='groove', borderwidth='2', width=10) self.label_block.grid(row=row_number, column=4) self.label_case_priority = tk.Label(self.frm2, text=self.toal_case_priority, relief='groove', borderwidth='2', width=10) self.label_case_priority.grid(row=row_number, column=5) def upload_files(self): """上傳多個(gè)文件,并插入text中""" select_files = tk.filedialog.askopenfilenames(title=u"可選擇1個(gè)或多個(gè)文件") for file in select_files: self.text.insert(tk.END, file + '\n') self.text.update() if __name__ == '__main__': r = tk.Tk() ParseXmind(r) r.mainloop()
二、工具使用說明
1、xmind文件中使用下列圖標(biāo)進(jìn)行分類標(biāo)識(shí):
標(biāo)記表示p0級(jí)別case:數(shù)字1
標(biāo)記表示執(zhí)行通過case:綠色√
標(biāo)記表示執(zhí)行失敗case:紅色×
標(biāo)記表示執(zhí)行阻塞case:橙色!
2、執(zhí)行代碼
3、在彈框內(nèi)【上傳xmind文件】按鈕
4、在彈框內(nèi)【開始統(tǒng)計(jì)】按鈕
三、實(shí)現(xiàn)效果
到此這篇關(guān)于python提效小工具之統(tǒng)計(jì)xmind用例數(shù)量(源碼)的文章就介紹到這了,更多相關(guān)python xmind工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算示例
這篇文章主要介紹了Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算,涉及Python笛卡爾積算法及排列組合操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11詳解Python?itertools模塊中starmap函數(shù)的應(yīng)用
starmap是一個(gè)非常有用的函數(shù),它屬于itertools模塊中的一部分,本文將詳細(xì)介紹starmap函數(shù)的作用、用法以及實(shí)際應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助2024-03-03Python常用base64 md5 aes des crc32加密解密方法匯總
這篇文章主要介紹了Python常用base64 md5 aes des crc32加密解密方法匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Pandas實(shí)現(xiàn)自定義Excel格式并導(dǎo)出多個(gè)sheet表
pandas默認(rèn)整合XlsxWriter驅(qū)動(dòng),可以自動(dòng)化處理excel操作,并提供公式、設(shè)置單元格格式、可視化分析圖片等操作,本文就來和大家詳細(xì)聊聊2023-05-05pandas改變df列的順序的方法實(shí)現(xiàn)
本文主要介紹了pandas改變df列的順序的方法實(shí)現(xiàn),主要使用 Pandas 中的 reindex() 方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03使用Python實(shí)現(xiàn)控制攝像頭的方法詳解
當(dāng)今,隨著計(jì)算機(jī)技術(shù)的發(fā)展,攝像頭已經(jīng)成為了人們生活中不可或缺的一部分。而Python作為一種流行的編程語言,也可以輕松地控制和操作攝像頭。本文將介紹如何使用Python中的常用庫(例如OpenCV和Tkinter)來控制和操作攝像頭,需要的可以參考一下2023-03-03Python3.6日志Logging模塊簡(jiǎn)單用法示例
這篇文章主要介紹了Python3.6日志Logging模塊簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Python3.6環(huán)境下日志Logging模塊設(shè)置格式、文件流輸出相關(guān)操作技巧,需要的朋友可以參考下2018-06-06Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決
這篇文章主要介紹了Matlab中的mat數(shù)據(jù)轉(zhuǎn)成python中使用的npy數(shù)據(jù)遇到的坑及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12