需求:
因为公司使用的是testlink,将用例从库中导出时,是excel格式,所以大家有需求将xml格式用例转换成excel格式
实现思路:
1.解析xml格式,将testcase、steps、step,用例步骤、预计结果提取出来
2. 将文件写入到excel中
3.通过tkinter库,获取文件路径与名称
4.使用pyinstaller打包成exe文件,用户可以直接使用
实现代码
# coding:utf-8
import xml.dom.minidom
from xml.dom.minidom import Document
import re
import xlwt
from tkinter import filedialog
from tkinter import *
import tkinter
# 生成界面框
win = tkinter.Tk()
win.title("生成用例excel")
win.geometry("500x400+120+50")
# 获取xml文件路径
def getCliPath():
FilePath = filedialog.askopenfilename()
xmlPath.set(FilePath)
# 界面按钮布局,获取xml路径的按钮
xmlPath = tkinter.StringVar()
button = tkinter.Button(win, text="点击按钮获取xml路径", command=getCliPath)
button.pack()
button.place(x=20, y=30)
# 文件路径
extry = tkinter.Entry(win, font=('微软雅黑', 12), textvariable=xmlPath)
extry.place(x=200, y=30)
# 设置k的值,后面写入是着行递增
def func():
# 读取xml文件
FilePath = extry.get()
dom = xml.dom.minidom.parse(FilePath)
xml_name = FilePath.split('/')[-1].split('.')[0]
# 写入excel中
workbook = xlwt.Workbook(encoding="utf-8")
# 创建sheet名称
booksheet = workbook.add_sheet(xml_name)
# 设置excel宽度
booksheet.col(0).width = 5120
booksheet.col(1).width = 5120
booksheet.col(2).width = 5120
booksheet.col(3).width = 5120
booksheet.col(4).width = 5120
booksheet.col(5).width = 5120
borders = xlwt.Borders()
borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
# 设置头部文件字体格式等
title = xlwt.easyxf(
u'font:name 仿宋,height 240 ,colour_index black, bold on, italic off; align: wrap on, vert centre, horiz center;pattern: pattern solid, fore_colour light_orange;')
# 设置写入文件的格式
style = xlwt.easyxf('align: wrap on,vert centre, horiz center')
# 设置excel字段
item = '用例集'
Subitem = '主题'
CaseTitle = '描述'
Condition = '前置条件'
actions = '操作步骤'
data = '操作步骤'
Result = '预期结果'
ExternalId = 'ExternalId'
booksheet.write(0, 0, item, title)
booksheet.write(0, 1, Subitem, title)
booksheet.write(0, 2, CaseTitle, title)
booksheet.write(0, 3, Condition, title)
booksheet.write(0, 4, actions, title)
booksheet.write(0, 5, data, title)
booksheet.write(0, 6, Result, title)
booksheet.write(0, 7, ExternalId, title)
testcases_tag = dom.getElementsByTagName('testcases')
testcase_tag_ = testcases_tag[0].getElementsByTagName('testcase')
k = 0
for j in range(len(testcase_tag_)):
step_tag_ = testcases_tag[0].getElementsByTagName('testcase')[j].getElementsByTagName('steps')[0].getElementsByTagName('step')
print(step_tag_)
for i in range(len(step_tag_)):
# k的值向上递增
k = k + 1
# 获取用例主题
testcase_tag_name = testcases_tag[0].getElementsByTagName('testcase')[j].getAttribute('name')
# 写入excel中
booksheet.write(k, 1, testcase_tag_name, style)
# 获取操作步骤
step_number = \
testcases_tag[0].getElementsByTagName('testcase')[j].getElementsByTagName('steps')[
0].getElementsByTagName(
'step')[
i].getElementsByTagName('step_number')[0].firstChild.data
# 进行替换
step_number = re.sub(r'<(p|br|/p|br/)*>', '', step_number)
# 获取用例步骤
step = \
testcases_tag[0].getElementsByTagName('testcase')[j].getElementsByTagName('steps')[0].getElementsByTagName('step')[i].getElementsByTagName('actions')[0].firstChild.data
step = re.sub(r'<(p|br|/p|br/)*>', '', step)
# 将得到文件写入excel中
booksheet.write(k, 4, step, style)
booksheet.write(k, 0, '功能测试用例集', style)
# 获取用例运行结果
expectedresults = \
testcases_tag[0].getElementsByTagName('testcase')[j].getElementsByTagName('steps')[0].getElementsByTagName('step')[i].getElementsByTagName('expectedresults')[0].firstChild.data
expectedresults = re.sub(r'<(p|br|/p|br/)*>', '', expectedresults)
booksheet.write(k, 6, expectedresults, style)
# 获取extendId值
execution_type = \
testcases_tag[0].getElementsByTagName('testcase')[j].getElementsByTagName('steps')[0].getElementsByTagName('step')[0].getElementsByTagName('execution_type')[0].firstChild.data
execution_type = re.sub(r'<(p|br|/p|br/)*>', '', execution_type)
# 将文件写入至excel
booksheet.write(k, 7, execution_type)
# 保存至本地
workbook.save('{}.xls'.format(xml_name))
# 设置button按钮
button = tkinter.Button(
win,
text="生成用例excel",
command=func
)
button.pack()
button.place(x=200, y=200)
win.mainloop()