使用python的xmindparser库将xmind测试用例转成excel


# -*- coding: UTF-8 -*-
# 973800054@qq.com 性感小白,请多指教

from xmindparser import xmind_to_dict
import xlwt

class xmind_to_xls():
""" xmin文档用例转xls文档用例"""

def infinite_for(self,loop,strvar,listvar,n):

for branch1 in loop:
# 定义新字符串,把所有路径加起来
strvar1 = strvar+ branch1['title'] + '/#'
if 'topics' not in branch1:
# 分支遍历完,把他加到列表里面
listvar.append(strvar1)
continue

branch = branch1['topics']
# 无限循环调用方法,遍历他的全部分支
self.infinite_for(branch,strvar1,listvar,n)
# 根据传参重写路径
else:
strvar = strvar



def write_excel(self, xmind_file,path_o):
'''生成excel文件函数'''
# 自动换行
style = xlwt.easyxf('align: wrap on')
self.f = xlwt.Workbook()
self.sheet1 = self.f.add_sheet('sheet1', cell_overwrite_ok=True)

self.row0 = ["storyid", '所属模块','路径', '用例标题', '前置条件', '步骤', '预期', '关键词', '优先级', '用例类型', '适用阶段']
# 生成第一行
for i in range(0, len(self.row0)):
self.sheet1.write(0, i, self.row0[i])
# 开始解析xmind并写入excel
self.out = xmind_to_dict(xmind_file)
self.xls_name = self.out[0]['topic']['title']
listvar = [] # 所有用例
strvar = '' # 单条用例
self.story = self.out[0]['topic']['topics']
# 循环遍历整个字典,并把每个最小分支的路径按 /# 加入到listvar 列表中
self.infinite_for(self.story,strvar,listvar,0)
try:
print(listvar)
n = 1
for a_var in listvar:
l_var = a_var.split('/#')[:-1]
if len(l_var) < 3:
print('用例格式不规范')
break
title_no = '%03d0'%n # 用例编号 0
mod = f'{l_var[0]}1' # 所属模块 1
title = f'{l_var[-3]}3' # 用例标题 3
step = f'{l_var[-2]}5' # 操作步骤 5
result = f'{l_var[-1]}6' # 预期结果 6
way ='' # 用例路径 2
for i in l_var[:-3]:
way += i+'/'
way = f'{way[:-1]}2'
# 写入的参数
li_var = [title_no,mod,way,title,step,result]
for j in li_var:
self.sheet1.write(n, int(j[-1]), j[:-1], style)
n +=1




self.sheet1.col(2).width = 5120 # 设置第三列单元格宽度
self.sheet1.col(3).width = 5120 # 设置第四列单元格宽度
self.sheet1.col(5).width = 5120*3 # 设置第六列单元格宽度
self.sheet1.col(6).width = 5120*3 # 设置第七列单元格宽度
self.f.save(f'{path_o}\{self.xls_name}.xls' ) # xls名称取xmind主题名称
rs = "转换成功"
except:
print('格式错误')
rs = "格式错误"
return rs

if __name__ == '__main__':
xmind_file = r"C:\Users\admin\Desktop\work\scr\xmid_excel\cous\知识库系统V1.0.3.xmind" # xmind文件
xmind_to_xls().write_excel(xmind_file, r"C:\Users\admin\Desktop")





第二个模块
# -*- coding: UTF-8 -*-

import tkinter.filedialog
from apt import read_xmid
import win32api, win32con

import time

import os
import tkinter.filedialog

rs = read_xmid.xmind_to_xls()

root = tkinter.Tk() #创建一个Tkinter.Tk()实例
root.withdraw() #将Tkinter.Tk()实例隐藏

try:
# 如果用户设置了桌面会失效
default_dir = os.path.join(os.path.expanduser("~"), 'Desktop')
# default_dir = r"." # 设置默认打开目录
# default_dir = os.path.abspath(default_dir)
# print(default_dir)

fname = tkinter.filedialog.askopenfilename(title=u"选择文件",
initialdir=(os.path.expanduser(default_dir)))

if len(fname) == 0:
a = 1/len(fname)

# print(fname) # 返回文件全路径
cfname = tkinter.filedialog.askdirectory(title=u"保存位置") # 返回目录路径
# print(cfname) # 返回目录路径
if len(cfname) == 0:
a = 1/len(fname)

try :
rs = rs.write_excel(fname, cfname)
win32api.MessageBox(None, rs, "pywin32", win32con.MB_OK)
except Exception as e:
win32api.MessageBox(None, f'运行异常:{repr(e)}', "pywin32", win32con.MB_OK)
except ZeroDivisionError:
win32api.MessageBox(None, f'请选择文件', "pywin32", win32con.MB_OK)


posted @ 2021-10-15 13:32  彭夸夸  阅读(850)  评论(0)    收藏  举报