利用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库转换很齐全,但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.messagebox

class 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 0

    def xmind_title(self,value):
        """获取xmind标题内容"""
        return value['title']

    def writeExcel(self,row,case,excelName):
        sort=0
        for key,value in case.items():
            self.worksheet.write(row, sort, value)
            sort=sort+1
        self.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 + 1
                    self.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+1
                        self.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转换成xls
            self.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(二) - 晚风拂面 - 博客园

  • 1
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值