Python解析Xmind工具
使用Xmind写用例
使用Python解析Xmind,统计用例个数
代码:
- from xmindparser import xmind_to_dict
- import tkinter as tk
- from tkinter import filedialog
- class ParseXmind:
- # 统计文件中用例数
- def count_case(self, li):
- for i in range(len(li)):
- if li[i].__contains__('topics'): # 带topics标签意味着有子标题,递归执行方法
- self.count_case(li[i]['topics'])
- else: # 不带topics意味着无子标题,此级别既是用例
- # print(li[i]['title'])
- if li[i].__contains__('makers'): # 有标记成功或失败时会有makers标签
- if li[i]['makers'].__contains__('task-done'): # 标记成功的
- self.case_success += 1
- elif li[i]['makers'].__contains__('symbol-wrong'): # 标记失败的
- self.case_fail += 1
- elif li[i]['makers'].__contains__('symbol-code'): # 标记阻塞的
- self.case_block += 1
- self.count += 1 # 用例总数
- # print(self.count)
- # 用例统计表新增一行
- def new_line(self, filename, row_number):
- self.count = 0
- self.case_fail = 0
- self.case_success = 0
- self.case_block = 0
- # 调用python中xmind_to_dict方法,将xmind转成字典
- self.sheets = xmind_to_dict(filename) # sheets是一个list,可包含多sheet页;
- for sheet in self.sheets:
- print(sheet)
- self.my_list = sheet['topic']['topics'] # 字典的值sheet['topic']['topics']是一个list
- # print(my_list)
- self.count_case(self.my_list)
- # 插入一行统计数据
- lastname = filename.split('/')
- self.label_file = tk.Label(self.frm2, text=lastname[-1], relief='groove', borderwidth='', width=25)
- self.label_file.grid(row=row_number, column=0)
- self.label_case = tk.Label(self.frm2, text=self.count, relief='groove', borderwidth='', 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='', 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='', 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='', width=10)
- self.label_block.grid(row=row_number, column=4)
- self.total_cases += self.count
- self.total_success += self.case_success
- self.total_fail += self.case_fail
- self.total_block += self.case_block
- # 用例统计表新增多行
- def new_lines(self):
- # total汇总用
- self.total_cases = 0
- self.total_success = 0
- self.total_fail = 0
- self.total_block = 0
- lines = self.text.get(1.0, tk.END) # 从text中获取所有行
- 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='', 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='', 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='', 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='', 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='', width=10)
- self.label_block.grid(row=row_number, column=4)
- # 上传多个文件,并插入text中
- def upload_files(self):
- select_files = tk.filedialog.askopenfilenames(title="可选择1个或多个文件")
- for file in select_files:
- self.text.insert(tk.END, file + '\n')
- self.text.update()
- def __init__(self, root):
- # GUI
- root.title('Xmind用例个数统计')
- width = 570
- height = 500
- 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))
- self.frm1 = tk.Frame(root)
- self.frm2 = tk.Frame(root)
- self.frm1.grid(row=0, padx='', pady='')
- self.frm2.grid(row=1, padx='', pady='')
- self.but_upload = tk.Button(self.frm1, text='上传xmind文件', command=self.upload_files, bg='#dfdfdf')
- self.but_upload.grid(row=0, column=0, pady='')
- 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="开始统计", command=self.new_lines, bg='#dfdfdf')
- self.but2.grid(row=0, columnspan=5, pady='')
- self.label_file = tk.Label(self.frm2, text="文件名", relief='groove', borderwidth='', width=25, bg='#FFD0A2')
- self.label_file.grid(row=1, column=0)
- self.label_case = tk.Label(self.frm2, text="用例数", relief='groove', borderwidth='', width=10, bg='#FFD0A2').grid(row=1, column=1)
- self.label_pass = tk.Label(self.frm2, text="成功", relief='groove', borderwidth='', width=10, bg='#FFD0A2').grid(row=1, column=2)
- self.label_fail = tk.Label(self.frm2, text="失败", relief='groove', borderwidth='', width=10, bg='#FFD0A2').grid(row=1, column=3)
- self.label_block = tk.Label(self.frm2, text="阻塞", relief='groove', borderwidth='', width=10, bg='#FFD0A2').grid(row=1, column=4)
- root = tk.Tk()
- ParseXmind(root)
- root.mainloop()
执行效果:
Python解析Xmind工具的更多相关文章
- 用Python解析XMind
本文来自网易云社区 作者:孙圣翔 转自:http://shengxiang.me/article/35/python-parse-xmind.html XMind是画思维脑图很好的工具,正好组里有个需 ...
- 提效工具-python解析xmind文件及xmind用例统计
现状 每个公司都有一个维护测试case的系统,有自研的也有买的,比如QC, 禅道等等,QA往往习惯使用xmind等思维导图工具来编写测试用例,因为思路清晰,编写方便,那么这就有一个问题,大多公司要求所 ...
- PYTHON解析XML的多种方式效率对比实测
在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜索后发现,目前应用比较广泛,且效率相对较高的E ...
- Python 包管理工具解惑
Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...
- Python第三方常用工具、库、框架等
Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换.打印和显示.还能进行一些图形效果的处理,如图形的放大.缩小和旋 ...
- python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片
首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. ...
- Python包管理工具和多版本环境管理
1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...
- 【转】Python 爬虫的工具列表【预】
这个列表包含与网页抓取和数据处理的Python库 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络 ...
- java 写一个JSON解析的工具类
上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能 ...
随机推荐
- [Ynoi2018]末日时在做什么?有没有空?可以来拯救吗?
这道题真的超级...毒瘤 + 卡常 + 耗 RP 啊... 传送门 noteskey 题解看 shadowice 大仙 的 code 如果发现自己 T 掉了,别心急,洗把脸再交一遍试试... //by ...
- webpack4加载字体
webpack加载字体,刚开始下载完字体后就用css去引用它,结果死活没显示我要的字体,后来https://www.aliyun.com/jiaocheng/654750.html这篇文章说要把下载的 ...
- unity 网页加载AB问题
下载一次后会缓存,清理一下就能加载新的同名AB了 AssetBundle.onload
- OrCAD Capture CIS 16.6 为原理图中的Off-Page Connector添加页面编号
操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 为原理图中的Off-Page Connector添加页面编号 一般来 ...
- Ubuntu 18.04LTS 更新镜像配置
清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ Ubuntu 的软件源配置文件是 /etc/apt/sources.list.将 ...
- .net core2.x 自动注入 Entity(实体对象到上下文)
概要:有点老套,因为早在 .net frmework的时候(core还没出来),我们在使用 ef(4....6)的时候就已经这么用,这里我在搭建框架,所以随手写下,让后来人直接拿去用用. 1.使用前提 ...
- 利用MySQL游标进行计算排名
SELECT a.id, a.nick_name, a.member_account, a.integral, () AS tRank #计算行号 FROM tzqc_raw_data AS a, ( ...
- vue中mint-ui的filed的与blur事件结合实现检查用户输入是否正确
标题mint-ui的filed与blur事件验证用户输入格式是否正确说明:本人前端菜鸟,只是想借个地方做个笔记,为了以后查阅时比较方便.如有大神有什么建议的地方,欢迎提出来. 1.不得不说,mint- ...
- Lesnoe Ozero 2017. BSUIR Open 2017
A. Tree Orientation 树形DP,$f[i][j][k]$表示$i$的子树中有$j$个汇点,$i$往父亲的树边方向为$k$的方案数. 转移则需要另一个DP:$g[i][j][k]$表示 ...
- Java Web 浏览器关闭后Session就会被销毁吗?
浏览器关闭后Session就会被销毁吗? Session是JSP的九大内置对象(也称为隐含对象)中的一个,用于保存当前用户的状态信息,初学者可能认为Session的生命周期是从打开一个浏览器发送请求到 ...