tkinker库将testlink导出的xml用例转换为excel

本文介绍了一个用于将XML格式的测试用例转换为Excel格式的小工具。该工具利用Python的xml.dom.minidom库解析XML文件,并使用xlwt库将数据写入Excel。此外,还通过Tkinter库实现了文件路径的选择功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

     因为公司使用的是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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值