我正在参与掘金创作者训练营第4期(带链接:juejin.cn/post/706419…
1、前言
本人是测试一枚,新公司新人一枚,新公司使用的tapd,测试用例需要按照tapd上默认xls文档格式,我用表格编写测试用例有点不顺手,所以就想着怎么把xmind转成tapd要求的xls表格格式。
2、使用说明
excel表格名:xmind转成xls表格的名字
用例目录:与tapd命名一致即可(也可不填,导入tapd时再指定目录)
星星图标:用例执行阶段 依次为 冒烟|迭代|回归|PL回归|生产回归
优先级图标:测试用例等级,p1,p2,p3...
2、小工具将xmind转xls
目标路径:xmind测试用例地址
需求ID:tapd中需求ID号
执行人:可不填,tapd默认导入者为执行人
提交:点击提交xmind测试用例目录下会生成xls测试用例
3、导出的xls如下图
4、代码
小工具使用python+xmindparser+xlwt实现,使用‘tkinter’实现布局,
from xmindparser import xmind_to_dict
import re
import xlwt
import os
class xmind_to_xls():
def xmind_num(self, value):
"""获取xmind标题个数"""
try:
return len(value['topics'])
except KeyError:
return 0
def xmind_title(self, value):
"""获取xmind标题内容"""
try:
return value['title']
except KeyError:
return ''
## 返回文件路径
def xmind_path_dir(self, xmind_file):
return os.path.dirname(xmind_file)
#测试 用例执行阶段 冒烟|迭代|回归|PL回归|生产回归
def xmind_makers(self, value):
star_makers = {
"star-red": "冒烟",
"star-orange": "迭代",
"star-dark-blue": "回归",
"star-purple": "PL回归",
"star-green": "生产回归"
}
try:
star_list = value['makers']
for i in star_list:
if star_makers.get(i) != None :
return star_makers[i]
return ""
except KeyError:
return ""
#测试用例等级
def xmind_p(self, value):
p_makers = {
"priority-1": "P1",
"priority-2": "P2",
"priority-3": "P3",
"priority-4": "P4",
"priority-5": "P5"
}
try:
star_list = value['makers']
for i in star_list:
if p_makers.get(i) != None :
return p_makers[i]
return ""
except KeyError:
return ""
def xmind_cat(self, filename):
'''调试函数,打印内容用的'''
self.out = xmind_to_dict(filename)
self.story = self.out[0]['topic']['topics']
self.num=len(self.story)
print(self.out)
print(self.out[0]['topic']['title'])
return self.story, self.num
#def write_excel(self, xmind_file, testcasetype='', testcasestatus='', testcaselevel='', performer=''):
def write_excel(self, xmind_file, tapdID='', editionname='', testcasetype='', testcasestatus='', testcaselevel='', performer=''):
'''生成excel文件函数'''
self.f=xlwt.Workbook()
self.sheet1 =self.f.add_sheet('sheet1', cell_overwrite_ok=True)
# self.row0 = ['用例目录', '用例名称', '需求ID','前置条件', '用例步骤', '预期结果', '用例类型', '用例状态', '用例等级', '创建人', '用例执行阶段']
# 0 1 2 3 4 5 6 7
self.row0 = ['用例目录','用例名称','需求ID','前置条件','用例步骤','预期结果','用例类型','用例状态','用例等级','创建人','用例执行阶段']
#生成第一行 用例目录,创建人
for r in range(0, len(self.row0)):
self.sheet1.write(0, r, self.row0[r])
self.out = xmind_to_dict(xmind_file)
self.xls_name = self.out[0]['topic']['title'] # xls name
self.menu = self.out[0]['topic']['topics'] ##用例目录列表
self.menunum = len(self.menu) # 总用例目录数
# 设置用例数 变量
z = 0 # 用例结果数计数器
for m in range(0, self.menunum):
self.menu_dir = self.xmind_title(self.menu[m]) #用例目录
self.story = self.menu[m]['topics'] ##用例列表
self.storynum = len(self.story) #总用例数
# j=1 #用例计算器
for i in range(0, self.storynum):
self.testcase_name = self.xmind_title(self.story[i]) ##用例名称
self.testcase_star = self.xmind_makers(self.story[i]) ##用例类型 冒烟
self.testcase_p = self.xmind_p(self.story[i]) ##用例等级 p1
self.testcase_content = self.story[i]['topics'][0] ##用例过程
self.testcase_num = self.xmind_num(self.testcase_content)
self.testcase_pre = self.xmind_title(self.testcase_content) ##前置条件
self.sheet1.write(z + 1, 1, self.testcase_name) # 用例名字
self.sheet1.write(z + 1, 0, self.menu_dir) # 用例目录
self.sheet1.write(z + 1, 2, tapdID) # 需求id
self.sheet1.write(z + 1, 3, self.testcase_pre) # 前置条件
self.sheet1.write(z + 1, 6, self.testcase_star) # 用例类型
self.sheet1.write(z + 1, 7, u"正常") # 用例状态
self.sheet1.write(z + 1, 8, self.testcase_p) # 用例等级
self.sheet1.write(z + 1, 9, editionname) # 创建人
self.teststep_title = ''
self.teststep_result = ''
for k in range(0, self.testcase_num):
self.testcase = self.testcase_content['topics'][k] # 用例描述
# 用例步骤
self.teststep_title += self.xmind_title(self.testcase) + '\n'
print(self.teststep_title)
self.teststep_result += self.xmind_title(self.testcase['topics'][0]) + '\n'
self.sheet1.write(z + 1, 4, self.teststep_title.strip("\n"))
self.sheet1.write(z + 1, 5, self.teststep_result.strip("\n"))
z = z + 1
dir = self.xmind_path_dir(xmind_file)
print(dir)
self.f.save(dir + "/" + self.xls_name+'.xls') #xls名称取xmind主题名称
if __name__ == '__main__':
#xmind_file = "**.xmind" # xmind文件
tapdID='需求id' # 需求id
editionname='bb' # 创建人
#performer='cc'
xmind_to_xls().write_excel(xmind_file, tapdID, editionname)
#xmind_to_xls().xmind_cat(xmind_file)
import tkinter as tk
from tkinter.filedialog import askopenfilename
from xmindtoxls import xmind_to_xls
from tkinter.messagebox import showinfo
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)
# 创建一个标签,输入版用例目录,一般为“tabd目录名”
self.trLabel = tk.Label(self, text="需求ID")
# 设定使用grid布局 servicename, editionname
self.trLabel.grid(row=2, column=0)
self.tapdID = tk.StringVar()
self.trEntry = tk.Entry(self, textvariable = self.tapdID)
self.trEntry.grid(row=2, column=1)
# 创建一个标签,输入创建人-执行人
self.fourLabel = tk.Label(self, text="执行人")
# 设定使用grid布局
self.fourLabel.grid(row=4, column=0)
self.owner = tk.StringVar()
self.fourEntry = tk.Entry(self,textvariable = self.owner)
self.fourEntry.grid(row=4, column=1)
# 创建一个提交按钮,用来触发提交方法,获取值
self.clickButton = tk.Button(self, text="提交", command=self.getvalue)
# 设定使用grid布局
self.clickButton.grid(row=5, column=1)
def getvalue(self):
'''获取输入的值,并执行转换excel函数'''
global way, tapdID, owner
way = self.path.get()
# module = self.module.get()
tapdID = self.tapdID.get().strip()
owner = self.owner.get().strip()
print(way, tapdID, owner)
self.regvalue = '.*.xmind$'
self.xmind_reg = re.match(self.regvalue, way)
if self.xmind_reg:
# xmind转换成xls
self.xmind_to_xls = xmind_to_xls()
self.xmind_to_xls.write_excel(way, tapdID, owner)
showinfo(title='恭喜你!!!', message='xls生成成功')
else:
showinfo(title='提示', message='请选择正确的xmind文件,谢谢!')
return
# 创建一个MainUI对象
app = MainUI()
# 设置窗口标题
app.master.title('「xmind转xls」')
# 设置窗体大小
app.master.geometry('300x200')
app.place(relx=0.1, y=10, relheight=0.6, width=300)
# 主循环开始
app.mainloop()
总结
代码写的有点粗糙,后续优化点:
TODO:
1、实现多模板
2、内容提示友好点