利用Python把xmind 转 Excel 测试用例,并转换成gui可执行的exe文件

2024-05-29 17:48

本文主要是介绍利用Python把xmind 转 Excel 测试用例,并转换成gui可执行的exe文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 后续更新:

这篇文章是好几年前写的,其实写得很死,不是很好在项目使用,后续发现了个开源项目,挺好的,有兴趣可以看下: Xmind用例导入到TAPD的方案(附代码)_测试超有范的博客-CSDN博客

-------------------------

纯个人初学学习分享记录,请大佬们手下留情 ~

分解一下必要的步骤(最后附上代码):

  1. 确定好自己的xmind的用例格式;
  2. mindparser库将xmind的文件内容转成字典格式的数据;
  3. xlwt库写成入xls文件;
  4. Python自带的gui库 tkinter来写 gui界面;
  5. 最后用pyinstaller来打包;

1、确定好自己的xmind的用例格式

自己的公司也没有一个固定格式,纯靠测试测试一条一条的复制粘贴进Excel,受不了!!!然后网上找了这么一个模板,这个模板也可以导进禅道(虽然我们公司也没有用),那就按这个看上去比较成熟模板把。

2、xmindparser库将xmind的文件内容转成字典格式的数据

在转库的选择上,有好几个,以下是其中两个:

  • xmind   https://testerhome.com/opensource_projects/xmind
  • xmindparser  将xmind文件转成可编程数据类型 - SegmentFault 思否

xmind库转换很齐全,但xmindparser对我来说够用了,轻便;

xmindparser转换也很简单:

#xmind to dict
from xmindparser import xmind_to_dict
dict_out = xmind_to_dict(xmind_file)#xmind to json
from xmindpraser import xmind_to_json
out_file = xmind_to_json(xmind_file)

 dict_out格式如下:

print(dict_out)[{'title': '画布 1', 'topic': {'title': '产品名称', 'topics': [{'title': 'A模块', 'topics': [{'title': '测试用例1', 'topics': [{'title': '测试步骤1', 'topics': [{'title': '预期结果1.1'}]}, {'title': '测试步骤1.2', 'topics': [{'title': '预期结果1.2'}]}]}, {'title': '用例标题2', 'topics': [{'title': '执行步骤2.2', 'topics': [{'title': '预期结果2.2'}]}, {'title': '测试步骤2.3', 'topics': [{'title': '预期结果2.3'}]}, {'title': '测试步骤2.4', 'topics': [{'title': '预期结果2.4'}]}]}, {'title': '用例标题3(步骤和预期结果可以为空)'}]}, {'title': 'C模块', 'topics': [{'title': '#异常(忽略)', 'topics': [{'title': '测试步骤', 'topics': [{'title': '预期结果'}]}, {'title': '测试步骤', 'topics': [{'title': '预期结果'}]}]}, {'title': '测试步骤2', 'topics': [{'title': '执行步骤1111\r\n测试步骤100000', 'topics': [{'title': '预期结果1.1'}]}, {'title': '#测试步骤42', 'topics': [{'title': '预期结果1.2'}]}, {'title': '测试步骤4.3', 'topics': [{'title': '预期结果1.3'}]}]}]}, {'title': '#B模块(整个模块忽略)', 'topics': [{'title': '测试步骤1', 'topics': [{'title': '执行步骤1\r\n测试步骤1', 'topics': [{'title': '预期结果1.1'}]}, {'title': '#测试步骤42', 'topics': [{'title': '预期结果1.2'}]}, {'title': '测试步骤4.3(没有预期结果会提示)', 'topics': [{'title': '11'}]}]}, {'title': '用例标题2'}]}]}, 'structure': 'org.xmind.ui.map.unbalanced'}]

3、xlwt库写成入xls文件

关于这个库的用法可以参考这个链接

 xlwt:https://www.jb51.net/article/154535.htm

4、tkinter库学习

哈,我是新手,也没打算深入学太多,就没花太多时间去整理,可以根据下面链接去学习,如果也有像我这样小白的,可以去B站(哔哩哔哩)搜索tkinter,看IT兄弟连的,讲得也比较基础。

tkinter库 http://c.biancheng.net/python/tkinter/

5、打包

打包用的是pyinstaller库,先在cmd下pip安装,然后进入相应的Python文件所在的文件夹下,输入命令 ():

pyinstaller -F xmindToExe.py -p  my_xmind_csv_002.py

就可以生成exe可执行文件了,这样这个xmind转xls的打包工具就完成了。注意电脑管家可能会把exe文件删除掉,设置为安全就可以了。

PS:小白可能遇到的坑(如我 - -):

window下cmd 切换目录
cd 是用于同一个磁盘的文件夹的切换但是要从C盘切换到D盘不能直接用cd,要加参数 /D,才能实现从C盘调到D盘
cd /D 可以连盘符一起切换> cd /D D:\Python_Pro\LZQ_Tester\D02_WYY_WuYa\working
或者先 d:  切换磁盘到D,再cd  D:\Python_Pro\LZQ_Tester\D02_WYY_WuYa\working

my_xmind_csv_002.py

from xmindparser import xmind_to_dict
import os,xlwt
from tkinter.messagebox import showinfo
import tkinter.messageboxclass xmind_to_csv():def __init__(self):self.workbook = xlwt.Workbook(encoding='utf-8')self.worksheet = self.workbook.add_sheet('sheet1')def numberLen(self,value,errornum=None):try:return len(value['topics'])except KeyError:if errornum==2:#tkinter.messagebox.askokcancel('提示', '案例 "{0}",没有测试步骤和预期结果喔! 请确认是否如此!'.format(value['title']))print('案例 "{0}",没有测试步骤和预期结果喔! 请确认是否如此!'.format(value['title']))if errornum == 3:#messagebox.showinfo(title='提示', message='案例 "{0}",没有预期结果喔! 请填写后重新执行!'.format(value['title']))print('案例 "{0}",没有预期结果喔! 请填写后重新执行!'.format(value['title']))return 0def xmind_title(self,value):"""获取xmind标题内容"""return value['title']def writeExcel(self,row,case,excelName):sort=0for key,value in case.items():self.worksheet.write(row, sort, value)sort=sort+1self.workbook.save(excelName+'.xls')def readXmind(self,FileName):self.rowNum = 0 #计算测试用例的条数self.caseDict={}self.XmindContent = xmind_to_dict(FileName)[0]['topic'] # xmind内容self.XmindTitle=self.xmind_title(self.XmindContent)TestSiutMunFlag=self.numberLen(self.XmindContent,0)for TestSiutMun in range(TestSiutMunFlag):TestCaseMunFlag=self.numberLen(self.XmindContent['topics'][TestSiutMun],1)for TestCaseMun in range(TestCaseMunFlag):TestStepMunFlag=self.numberLen(self.XmindContent['topics'][TestSiutMun]['topics'][TestCaseMun],2)#执行步骤跟预期结果为空的时候if TestStepMunFlag==0:self.caseDict['TestSiut'] = self.XmindContent['topics'][TestSiutMun]['title']self.caseDict['TestCase'] = self.XmindContent['topics'][TestSiutMun]['topics'][TestCaseMun]['title']self.caseDict['TestStep'] = '空'self.caseDict['TestResult'] = '空'self.caseDict['myTestCase'] = self.caseDict['TestSiut'] + '/' + self.caseDict['TestCase']print(self.rowNum,self.caseDict['myTestCase'])self.rowNum = self.rowNum + 1self.writeExcel(self.rowNum,self.caseDict,self.XmindTitle)for TestStepMun in range(TestStepMunFlag):TestResultFlag = self.numberLen(self.XmindContent['topics'][TestSiutMun]['topics'][TestCaseMun]['topics'][TestStepMun],3)#预期结果不能为空if TestResultFlag != 0:self.caseDict['TestSiut']=self.XmindContent['topics'][TestSiutMun]['title']self.caseDict['TestCase']=self.XmindContent['topics'][TestSiutMun]['topics'][TestCaseMun]['title']self.caseDict['TestStep']=self.XmindContent['topics'][TestSiutMun]['topics'][TestCaseMun]['topics'][TestStepMun]['title']self.caseDict['TestResult'] = self.XmindContent['topics'][TestSiutMun]['topics'][TestCaseMun]['topics'][TestStepMun]['topics'][0]['title']self.caseDict['myTestCase']=self.caseDict['TestSiut']+'/'+self.caseDict['TestCase']+'-'+self.caseDict['TestStep']+'-'+self.caseDict['TestResult']print(self.rowNum,len(self.caseDict['myTestCase']),self.caseDict['myTestCase'])self.rowNum=self.rowNum+1self.writeExcel(self.rowNum,self.caseDict,self.XmindTitle)#showinfo(title='转换结束', message='生成{0}条案例,请检查是否有误。'.format(self.rowNum))if __name__ == '__main__':XmindFile = os.path.join(os.path.dirname(__file__),'xmind_excel.xmind')  # xmind文件xmind_to_csv().readXmind(XmindFile)

xmind_excel.py

import tkinter as tk
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showinfo
from D02_WYY_WuYa.working.my_xmind_csv_003 import xmind_to_csv
import re# 定义MainUI类表示应用/窗口,继承Frame类
class MainUI(tk.Frame):# Application构造函数,master为窗口的父控件def __init__(self, master=None):# 初始化Application的Frame部分tk.Frame.__init__(self, master)# 显示窗口,并使用grid布局self.grid()self.path = tk.StringVar()# 创建控件self.createWidgets()def selectPath(self):'''选择要转换成excel的xmind地址'''self.path_ = askopenfilename()self.path.set(self.path_)# 创建控件def createWidgets(self):'''生成gui界面'''# 创建一个标签,输出要显示的内容self.firstLabel = tk.Label(self, text="目标路径")# 设定使用grid布局self.firstLabel.grid(row = 0, column = 0)self.firstEntry = tk.Entry(self,textvariable = self.path)self.firstEntry.grid(row=0, column=1)# 创建一个按钮,用来触发answer方法self.clickButton = tk.Button(self, text="路径选择", command=self.selectPath)# 设定使用grid布局self.clickButton.grid(row = 0, column = 2)self.clickButton = tk.Button(self, text="提交",command=self.getvalue)# 设定使用grid布局self.clickButton.grid(row=4, column=1)def getvalue(self):'''执行转换excel函数'''xmindPath = self.path.get()self.regvalue = '.*\.xmind$'self.xmind_reg = re.match(self.regvalue,xmindPath )if self.xmind_reg:# xmind转换成xlsself.xmind_to_xls = xmind_to_csv()self.xmind_to_xls.readXmind(xmindPath)else:showinfo(title='提示',message='请选择正确的xmind文件,谢谢!')# 创建一个MainUI对象
app = MainUI()
# 设置窗口标题
app.master.title('Xmind 转 xls ')
# 设置窗体大小
app.master.geometry('290x90')
app.master.resizable(False, False)
# 主循环开始
app.mainloop()

本文参考:

使用Python将xmind脑图转成excel用例(一) - 晚风拂面 - 博客园

使用Python中tkinter库简单gui界面制作及打包成exe(二) - 晚风拂面 - 博客园

这篇关于利用Python把xmind 转 Excel 测试用例,并转换成gui可执行的exe文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014218

相关文章

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码