使用python把xmind转换成excel测试用例的实现代码


Posted in Python onOctober 12, 2020

前言

因为写好了测试xmind脑图后,然后再编写测试用例,实在是太麻烦了,所以我写了一点测试用例后,就网上百度了下,怎么直接把xmind脑图转换成excel测试用例,纯个人学习笔记

本文参考:
https://3water.com/article/197246.htm


提示:以下是本篇文章正文内容,下面可供参考

一、确定好自己的xmind的用例格式

因为xmind的格式关系到编写代码的逻辑关系,所以需要先确定好自己的xmind的格式,本人学习时使用的格式如下:

使用python把xmind转换成excel测试用例的实现代码

二、xmindparser库的使用

1.下载库

默认下载最新库,在配好环境python环境变量的前提下,cmd中输入如下命令:

pip install xmindparser

或直接在pycharm中,点击左上角“File” > Settings(或者直接Ctrl+Alt+s) > Project:你的项目名称 > Python Interpreter > + > 搜索xmindparser > Install Package

使用python把xmind转换成excel测试用例的实现代码
使用python把xmind转换成excel测试用例的实现代码
使用python把xmind转换成excel测试用例的实现代码
使用python把xmind转换成excel测试用例的实现代码

2.xmindparser的使用

代码如下(示例):

from xmindparser import xmind_to_dict
import json

xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic']

# indent为显示json格式,ensure_ascii未显示为中文,不显示ASCII码
print(json.dumps(xm, indent=2, ensure_ascii=False))

运行结果显示为:

{
 "title": "sulinkAPP",
 "topics": [{
 "title": "登录",
 "topics": [{
  "title": "正向用例",
  "topics": [{
  "title": "正确的手机号码一键登录",
  "topics": [{
   "title": "进入‘登录/注册'页面",
   "topics": [{
   "title": "成功进入‘登录/注册'页面"
   }]
  },
  {
   "title": "选中‘我已阅读并同意用户协议',点击‘本机号码一键登录'",
   "topics": [{
   "title": "进入‘手机快捷登录页面'"
   }]
  },
  {
   "title": "点击‘一键登录'",
   "topics": [{
   "title": "登录成功,跳转至‘我的'页面"
   }]
  }]
  },
  {
  "title": "正确的手机号码及验证码登录",
  "topics": [{
   "title": "进入‘登录/注册'页面",
   "topics": [{
   "title": "成功进入‘登录/注册'页面"
   }]
  },
  {
   "title": "点击‘其他登录方式'",
   "topics": [{
   "title": "成功进入‘手机登录'页面"
   }]
  },
  {
   "title": "选择正确的区号,输入正确的手机号码,点击‘获取验证码'",
   "topics": [{
   "title": "提示‘验证码已发送',并正确收到验证码"
   }]
  },
  {
   "title": "正确输入收到的验证码,选中‘我已阅读并同意用户协议',点击登录",
   "topics": [{
   "title": "登录成功,跳转至‘我的'页面"
   }]
  }]
  }]
 }]
 }]
}

三、xlwt库的使用

1.下载xlwt库

默认下载最新库,在配好环境python环境变量的前提下,cmd中输入如下命令:

pip install xlwt

或如同xmindparser一样,在pycharm中下载

2.xlwt库的简单使用

简单的使用如下:

import xlwt # 导入模块

workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook 对象
worksheet = workbook.add_sheet('sheet1') # 创建工作表sheet
worksheet.write(0, 0, 'hello') # 往表中写内容,第一各参数 行,第二个参数列,第三个参数内容
workbook.save('students.xls') # 保存表为students.xls

详细的使用,可以参照此文章:https://3water.com/article/154535.htm

四、读取xmind数据并写入excel表格中

1.简单的创建一个用例excel表格,并写入第一行数据

代码如下

import xlwt # 导入模块
from xmindparser import xmind_to_dict

xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic']	# 读取xmind数据
workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象
worksheet = workbook.add_sheet(xm["title"], cell_overwrite_ok=True) # 创建工作表,并设置可以重写单元格内容
row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员']	# 写成excel表格用例的要素

for i in range(len(row0)):
 worksheet.write(0, i, row0[i])

2.读取xmind数据,然后写入上面表格中

在上面的代码的基础上添加点,把xmind数据写入excel表格中

import xlwt # 导入模块
from xmindparser import xmind_to_dict

xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic']	# 读取xmind数据
workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象
worksheet = workbook.add_sheet(xm["title"], cell_overwrite_ok=True) # 创建工作表,并设置可以重写单元格内容
row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员']	# 写成excel表格用例的要素

for i in range(len(row0)):
 worksheet.write(0, i, row0[i])

x = 0 # 写入数据的当前行数
z = 0 # 用例的编号
for i in range(len(xm["topics"])):
 test_module = xm["topics"][i]
 for j in range(len(test_module["topics"])):
 test_suit = test_module["topics"][j]
 for k in range(len(test_suit["topics"])):
  test_case = test_suit["topics"][k]
  z += 1
  c1 = len(test_case["topics"])	# 执行步骤有几个
  for n in range(len(test_case["topics"])):
  x += 1
  test_step = test_case["topics"][n]
  test_except = test_step["topics"][0]
  worksheet.write(x, 4, f"{n + 1}." + test_except["title"])	# 预期结果
  worksheet.write(x, 3, f"{n + 1}." + test_step["title"]) # 执行步骤
  worksheet.write_merge(x - c1 + 1, x, 0, 0, z) # testcaseid
  worksheet.write_merge(x - c1 + 1, x, 1, 1, test_module["title"]) # 测试需求名称
  worksheet.write_merge(x - c1 + 1, x, 2, 2, test_case["title"]) # 测试用例名称
workbook.save(xm["title"] + ".xls") # xls名称取xmind主题名称

执行结果如下:
使用python把xmind转换成excel测试用例的实现代码

3.调整下表格的格式

在上面的代码的基础上修改下,简单的增加表格的样式

import xlwt # 导入模块
from xmindparser import xmind_to_dict
def styles():
 """设置单元格的样式的基础方法"""
 style = xlwt.XFStyle()
 return style


def borders(status=1):
 """设置单元格的边框
 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13"""
 border = xlwt.Borders()
 border.left = status
 border.right = status
 border.top = status
 border.bottom = status
 return border


def heights(worksheet, line, size=4):
 """设置单元格的高度"""
 worksheet.row(line).height_mismatch = True
 worksheet.row(line).height = size*256


def widths(worksheet, line, size=11):
 """设置单元格的宽度"""
 worksheet.col(line).width = size*256


def alignments(**kwargs):
 """设置单元格的对齐方式
 status有两种:horz(水平),vert(垂直)
 horz中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),GENERAL,CENTER_ACROSS_SEL(分散),RIGHT(右边),LEFT(左边)
 vert中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),BOTTOM(下方),TOP(上方)"""
 alignment = xlwt.Alignment()

 if "horz" in kwargs.keys():
 alignment.horz = eval(f"xlwt.Alignment.HORZ_{kwargs['horz'].upper()}")
 if "vert" in kwargs.keys():
 alignment.vert = eval(f"xlwt.Alignment.VERT_{kwargs['vert'].upper()}")
 alignment.wrap = 1 # 设置自动换行
 return alignment


def fonts(name='宋体', bold=False, underline=False, italic=False, colour='black', height=11):
 """设置单元格中字体的样式
 默认字体为宋体,不加粗,没有下划线,不是斜体,黑色字体"""
 font = xlwt.Font()
 # 字体
 font.name = name
 # 加粗
 font.bold = bold
 # 下划线
 font.underline = underline
 # 斜体
 font.italic = italic
 # 颜色
 font.colour_index = xlwt.Style.colour_map[colour]
 # 大小
 font.height = 20 * height
 return font


def patterns(colors=1):
 """设置单元格的背景颜色,该数字表示的颜色在xlwt库的其他方法中也适用,默认颜色为白色
 0 = Black, 1 = White,2 = Red, 3 = Green, 4 = Blue,5 = Yellow, 6 = Magenta, 7 = Cyan,
 16 = Maroon, 17 = Dark Green,18 = Dark Blue, 19 = Dark Yellow ,almost brown), 20 = Dark Magenta,
 21 = Teal, 22 = Light Gray,23 = Dark Gray, the list goes on..."""
 pattern = xlwt.Pattern()
 pattern.pattern = xlwt.Pattern.SOLID_PATTERN
 pattern.pattern_fore_colour = colors
 return pattern

def main():
 xm = xmind_to_dict("sulinkAPP.xmind")[0]['topic']
 # print(json.dumps(xm, indent=2, ensure_ascii=False)) # indent为显示json格式,ensure_ascii为显示为中文,不显示ASCII码
 workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象
 worksheet = workbook.add_sheet(xm["title"], cell_overwrite_ok=True) # 创建工作表
 row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员']
 sizes = [10, 11, 30, 60, 50, 11, 11, 11]
 dicts = {"horz": "CENTER", "vert": "CENTER"}

 style2 = styles()
 style2.alignment = alignments(**dicts)
 style2.font = fonts()
 style2.borders = borders()
 style2.pattern = patterns(7)
 heights(worksheet, 0)
 for i in range(len(row0)):
 worksheet.write(0, i, row0[i], style2)
 widths(worksheet, i, size=sizes[i])

 style = styles()
 style.borders = borders()

 x = 0 # 写入数据的当前行数
 z = 0 # 用例的编号
 for i in range(len(xm["topics"])):
 test_module = xm["topics"][i]
 for j in range(len(test_module["topics"])):
  test_suit = test_module["topics"][j]
  for k in range(len(test_suit["topics"])):
  test_case = test_suit["topics"][k]
  z += 1
  c1 = len(test_case["topics"]) # 执行步骤有几个
  for n in range(len(test_case["topics"])):
   x += 1
   test_step = test_case["topics"][n]
   test_except = test_step["topics"][0]
   worksheet.write(x, 4, f"{n + 1}." + test_except["title"], style) # 预期结果
   worksheet.write(x, 3, f"{n + 1}." + test_step["title"], style) # 执行步骤
  worksheet.write_merge(x - c1 + 1, x, 0, 0, z, style) # testcaseid
  worksheet.write_merge(x - c1 + 1, x, 1, 1, test_module["title"], style) # 测试需求名称
  worksheet.write_merge(x - c1 + 1, x, 2, 2, test_case["title"], style) # 测试用例名称

 workbook.save(xm["title"] + ".xls") # xls名称取xmind主题名称


if __name__ == "__main__":
 main()

运行结果如下:

使用python把xmind转换成excel测试用例的实现代码

4.封装方法

上面的代码基本已经完成了,但是为了更好看,代码可读性更高,所以封装下方法

# -*- coding:utf-8 -*-

from xmindparser import xmind_to_dict
import xlwt


class XlwtSeting(object):

 @staticmethod # 静态方法装饰器,使用此装饰器装饰后,可以直接使用类名.方法名调用(XlwtSeting.styles()),并且不需要self参数
 def template_one(worksheet):
 dicts = {"horz": "CENTER", "vert": "CENTER"}
 sizes = [15, 15, 30, 60, 45, 45, 15, 15]

 se = XlwtSeting()
 style = se.styles()
 style.alignment = se.alignments(**dicts)
 style.font = se.fonts(bold=True)
 style.borders = se.borders()
 style.pattern = se.patterns(7)
 se.heights(worksheet, 0)
 for i in range(len(sizes)):
  se.widths(worksheet, i, size=sizes[i])
 return style

 @staticmethod
 def template_two():
 dicts2 = {"vert": "CENTER"}
 se = XlwtSeting()
 style = se.styles()
 style.borders = se.borders()
 style.alignment = se.alignments(**dicts2)
 return style

 @staticmethod
 def styles():
 """设置单元格的样式的基础方法"""
 style = xlwt.XFStyle()
 return style

 @staticmethod
 def borders(status=1):
 """设置单元格的边框,
 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13"""
 border = xlwt.Borders()
 border.left = status
 border.right = status
 border.top = status
 border.bottom = status
 return border

 @staticmethod
 def heights(worksheet, line, size=4):
 """设置单元格的高度"""
 worksheet.row(line).height_mismatch = True
 worksheet.row(line).height = size * 256

 @staticmethod
 def widths(worksheet, line, size=11):
 """设置单元格的宽度"""
 worksheet.col(line).width = size * 256

 @staticmethod
 def alignments(wrap=1, **kwargs):
 """设置单元格的对齐方式,
 :接收一个对齐参数的字典{"horz": "CENTER", "vert": "CENTER"}horz(水平),vert(垂直)
 :horz中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),GENERAL,CENTER_ACROSS_SEL(分散),RIGHT(右边),LEFT(左边)
 :vert中的direction常用的有:CENTER(居中),DISTRIBUTED(两端),BOTTOM(下方),TOP(上方)"""
 alignment = xlwt.Alignment()

 if "horz" in kwargs.keys():
  alignment.horz = eval(f"xlwt.Alignment.HORZ_{kwargs['horz'].upper()}")
 if "vert" in kwargs.keys():
  alignment.vert = eval(f"xlwt.Alignment.VERT_{kwargs['vert'].upper()}")
 alignment.wrap = wrap # 设置自动换行
 return alignment

 @staticmethod
 def fonts(name='宋体', bold=False, underline=False, italic=False, colour='black', height=11):
 """设置单元格中字体的样式,
 默认字体为宋体,不加粗,没有下划线,不是斜体,黑色字体"""
 font = xlwt.Font()
 # 字体
 font.name = name
 # 加粗
 font.bold = bold
 # 下划线
 font.underline = underline
 # 斜体
 font.italic = italic
 # 颜色
 font.colour_index = xlwt.Style.colour_map[colour]
 # 大小
 font.height = 20 * height
 return font

 @staticmethod
 def patterns(colors=1):
 """设置单元格的背景颜色,该数字表示的颜色在xlwt库的其他方法中也适用,默认颜色为白色
 0 = Black, 1 = White,2 = Red, 3 = Green, 4 = Blue,5 = Yellow, 6 = Magenta, 7 = Cyan,
 16 = Maroon, 17 = Dark Green,18 = Dark Blue, 19 = Dark Yellow ,almost brown), 20 = Dark Magenta,
 21 = Teal, 22 = Light Gray,23 = Dark Gray, the list goes on..."""
 pattern = xlwt.Pattern()
 pattern.pattern = xlwt.Pattern.SOLID_PATTERN
 pattern.pattern_fore_colour = colors
 return pattern


class XmindToXsl(XlwtSeting):

 def __init__(self, name):
 """调用类时,读取xmind文件,并生成excel表格"""
 try:
  self.xm = xmind_to_dict(name)[0]['topic']
 except Exception as e:
  print(f"打开xmind文件失败:{e}")
 self.workbook = xlwt.Workbook(encoding='utf-8') # 创建workbook对象
 self.worksheet = self.workbook.add_sheet(self.xm["title"], cell_overwrite_ok=True) # 创建工作表

 def save(self, name):
 """保存表格"""
 self.workbook.save(name + ".xls")

 @staticmethod
 def xmind_num(value):
 """获取xmind标题个数"""
 try:
  return len(value["topics"])
 except KeyError:
  return 0

 @staticmethod
 def xmind_title(value):
 """获取xmind标题内容"""
 return value["title"]

 def write_excel(self, result='', performer='', editionname=''):
 """生成excel文件的方法"""
 row0 = ["testcaseid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '实际结果', '执行人员', '版本']
 style2 = self.template_one(self.worksheet)
 for i in range(len(row0)):
  self.worksheet.write(0, i, row0[i], style2)

 style = self.template_two()

 x = 0 # 写入数据的当前行数
 z = 0 # 用例的编号
 for i in range(self.xmind_num(self.xm)):
  test_module = self.xm["topics"][i]
  modnum = self.xmind_num(test_module)
  if modnum != 0:
  for j in range(modnum):
   test_suit = test_module["topics"][j]
   suit_num = self.xmind_num(test_suit)
   if suit_num != 0:
   for k in range(suit_num):
    test_case = test_suit["topics"][k]
    z += 1
    c1 = self.xmind_num(test_case) # 执行步骤有几个
    if c1 != 0:
    for n in range(c1):
     x += 1
     test_step = test_case["topics"][n]
     test_except = test_step["topics"][0]
     self.heights(self.worksheet, x, size=2)
     step = f"{n + 1}." + self.xmind_title(test_step) # 执行步骤
     exce = f"{n + 1}." + self.xmind_title(test_except) # 预期结果
     self.worksheet.write(x, 3, step, style) # 写入执行步骤
     self.worksheet.write(x, 4, exce, style) # 写入预期结果
     self.worksheet.write(x, 5, result, style) # 写入实际结果
     self.worksheet.write(x, 6, performer, style) # 写入执行人
    mod = self.xmind_title(test_module) # 测试需求名称
    case = self.xmind_title(test_case) # 测试用例名称
    self.worksheet.write_merge(x - c1 + 1, x, 0, 0, z, style) # 写入testcaseid
    self.worksheet.write_merge(x - c1 + 1, x, 1, 1, mod, style) # 写入测试需求名称
    self.worksheet.write_merge(x - c1 + 1, x, 2, 2, case, style) # 写入测试用例名称
    self.worksheet.write_merge(x - c1 + 1, x, 7, 7, editionname, style) # 写入版本名称
    else:
    print("测试用例没有操作步骤及预期结果")
   else:
   print("没有测试用例")
  else:
  print("没有测试套件")

 self.save(self.xm["title"]) # 保存

if __name__ == "__main__":
 names = "sulinkAPP.xmind"
 xx = XmindToXsl(names)
 xx.write_excel()

运行的结果如下:

使用python把xmind转换成excel测试用例的实现代码

五、创建一个简单的GUI页面

1.简单使用tkinter

因为不需要太复杂的GUI页面,所以我直接使用的是python自带的tkinter库,先简单了解下tkinter库怎么使用,参考文档:https://blog.csdn.net/qq_46018418/article/details/105927203

import tkinter

top = tkinter.Tk() # 生成主窗口
label = tkinter.Label(top, text='Hello, GUI') # 生成标签
label.pack() # 将标签添加到主窗口
button1 = tkinter.Button(top, text="text") # 生成按钮1
button1.pack(side=tkinter.LEFT) # 将button1添加到top主窗口左边
button1 = tkinter.Button(top, text="text2") # 生成按钮2
button1.pack(side=tkinter.RIGHT) # 将button1添加到top主窗口左边
top.mainloop() # 进入消息循环(必需组件)

代码运行结果如下:

使用python把xmind转换成excel测试用例的实现代码

2.使用tkinter创建一个简单的GUI页面

先初步使用tkinter创建一个简单的GUI页面,初步了解tkinter的使用细节

import tkinter


def getvalue():
 """获取文本框中数据"""
 global path
 re = path.get()
 print(re)


top = tkinter.Tk() # 生成主窗口
top.title("test") # 设置窗口的标题
top.geometry("350x250") # 设置窗口的大小
top.geometry('+800+350') # 设置窗口出现的位置
top.resizable(0, 0) # 将窗口大小设置为不可变
label = tkinter.Label(top, text='目标路径') # 生成一个标签
label.grid(row=0, column=0) # 使用grid布局,标签显示在第一行,第一列
path = tkinter.StringVar() # 生成一个StringVar 对象,来保存下面输入框中的内容
firstEntry = tkinter.Entry(top, textvariable=path) # 生成一个文本框,内容保存在上面变量中
firstEntry.grid(row=0, column=1) # 使用grid布局,文本框显示在第一行,第二列

# 生成一个按钮,按钮上显示文字为“test”,设置点击按钮后,执行command后面的方法
# (注意:只写方法名,保存方法的位置,不能加上()来调用)例:getvalue,不能写成getvalue()
clickButton = tkinter.Button(top, text="提交", command=getvalue)
clickButton.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第三列

top.mainloop() # 进入消息循环(必需组件)

代码运行结果如下:
使用python把xmind转换成excel测试用例的实现代码

3.丰富GUI页面元素

进一步使用tkinter,把之前封装的方法需要的参数,看情况添加上GUI页面中

import tkinter
from tkinter.filedialog import askopenfilename


def get_value():
 """获取文本框中数据"""
 re = path.get()
 per = person.get()
 ver = version.get()
 print(f"地址:{re},测试人员:{per},测试版本:{ver}")


def select_path():
 """选择要转换成excel的xmind地址"""
 path_ = askopenfilename()
 path.set(path_)


top = tkinter.Tk() # 生成主窗口
top.title("test") # 设置窗口的标题
top.geometry("350x250") # 设置窗口的大小
top.geometry('+800+350') # 设置窗口出现的位置
top.resizable(0, 0) # 将窗口大小设置为不可变

# 文件的路径
first_label = tkinter.Label(top, text='目标路径:') # 生成一个标签
first_label.grid(row=0, column=0) # 使用grid布局,标签显示在第一行,第一列
path = tkinter.StringVar() # 生成一个StringVar 对象,来保存下面输入框中的内容
first_entry = tkinter.Entry(top, textvariable=path) # 生成一个文本框,内容保存在上面变量中
first_entry.grid(row=0, column=1) # 使用grid布局,文本框显示在第一行,第二列
# 生成一个按钮,按钮上显示文字为“test”,设置点击按钮后,执行command后面的方法
# (注意:只写方法名,保存方法的位置,不能加上()来调用)例:get_value,不能写成get_value()
way_button = tkinter.Button(top, text="路径选择", command=select_path)
way_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第三列

# 测试人员
second_label = tkinter.Label(top, text="执行人员:")
second_label.grid(row=1, column=0)
person = tkinter.StringVar()
second_entry = tkinter.Entry(top, textvariable=person)
second_entry.grid(row=1, column=1)

# 版本
third_label = tkinter.Label(top, text="测试版本:")
third_label.grid(row=2, column=0)
version = tkinter.StringVar()
third_entry = tkinter.Entry(top, textvariable=version)
third_entry.grid(row=2, column=1)

# 提交按钮
f_btn = tkinter.Frame(top, bg='red') # 设置一个frame框架,并设置背景颜色为红色
f_btn.place(x=0, y=205, width=350, height=45) # 设置框架的大小,及在top窗口显示位置
submit_button = tkinter.Button(f_btn, text="提交", command=get_value, width=49, height=2,
    bg="#00FFFF") # 设置按钮的文字,调用方法,大小,颜色,显示框架
submit_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第一列

# 进入消息循环(必需组件)
top.mainloop()

代码运行结果如下:

使用python把xmind转换成excel测试用例的实现代码

4.封装方法,关联转换方法

上面代码已经初步实现了所需的功能,下面进行封装方法,关联之前写好的xmind转换excel表格的方法

import tkinter
import re
from tkinter.filedialog import askopenfilename
from tkinter import messagebox

from xmindToExcel.xmind_to_xls import XmindToXsl


class MainUI(object):

 def __init__(self, title="sulink", geometrysize="350x250", geometry="+800+350"):
 self.top = tkinter.Tk() # 生成主窗口
 self.top.title(title) # 设置窗口的标题
 self.top.geometry(geometrysize) # 设置窗口的大小
 self.top.geometry(geometry) # 设置窗口出现的位置
 self.top.resizable(0, 0) # 将窗口大小设置为不可变
 self.path = tkinter.StringVar() # 生成一个StringVar 对象,来保存下面输入框中的内容
 self.person = tkinter.StringVar()
 self.version = tkinter.StringVar()
		
		# 调用自己写的create_widgets()方法
 self.create_widgets()

 def get_value(self):
 """获取文本框中数据,并调用XmindToXsl类"""
 path = self.path.get()
 per = self.person.get()
 ver = self.version.get()
 print(f"地址:{path},测试人员:{per},测试版本:{ver}")
 regvalue = '.*\.xmind$'
 xmind_reg = re.match(regvalue, path)
 if xmind_reg:
  # xmind转换成xls
  xmind_to_xls = XmindToXsl(path)
  xmind_to_xls.write_excel(performer=per, editionname=ver)
 else:
  messagebox.showinfo(title='提示', message='请选择正确的xmind文件,谢谢!')

 def select_path(self):
 """选择要转换成excel的xmind地址"""
 path_ = askopenfilename()
 self.path.set(path_)

 def create_widgets(self):
 	"""创建窗口中的各种元素"""
 # 文件的路径
 first_label = tkinter.Label(self.top, text='目标路径:') # 生成一个标签
 first_label.grid(row=0, column=0) # 使用grid布局,标签显示在第一行,第一列

 first_entry = tkinter.Entry(self.top, textvariable=self.path) # 生成一个文本框,内容保存在上面变量中
 first_entry.grid(row=0, column=1) # 使用grid布局,文本框显示在第一行,第二列
 way_button = tkinter.Button(self.top, text="路径选择", command=self.select_path)
 way_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第三列

 # 测试人员
 second_label = tkinter.Label(self.top, text="执行人员:")
 second_label.grid(row=1, column=0)
 second_entry = tkinter.Entry(self.top, textvariable=self.person)
 second_entry.grid(row=1, column=1)

 # 版本
 third_label = tkinter.Label(self.top, text="测试版本:")
 third_label.grid(row=2, column=0)
 third_entry = tkinter.Entry(self.top, textvariable=self.version)
 third_entry.grid(row=2, column=1)

 # 提交按钮
 f_btn = tkinter.Frame(self.top, bg='red') # 设置一个frame框架,并设置背景颜色为红色
 f_btn.place(x=0, y=205, width=350, height=45) # 设置框架的大小,及在top窗口显示位置
 submit_button = tkinter.Button(f_btn, text="提交", command=self.get_value, width=49, height=2,
     bg="#00FFFF") # 设置按钮的文字,调用方法,大小,颜色,显示框架
 submit_button.grid(row=0, column=2) # 使用grid布局,按钮显示在第一行,第一列

 # 进入消息循环(必需组件)
 self.top.mainloop()


if __name__ == "__main__":
 mu = MainUI(title="sulinkAPP")

代码运行结果如下:

使用python把xmind转换成excel测试用例的实现代码
使用python把xmind转换成excel测试用例的实现代码

六、打包

1.下载安装pyinstaller

下载安装pyinstaller 库,建议使用pip在线下载安装,因为有较多依赖库,pip下载安装时,会自动安装依赖库

pip install pyinstaller

2.使用pyinstaller打包文件

如编写上面全部代码的环境为虚拟环境,则打包时需要在主环境安装编写时导入的库(如:xmindparser,xlwt),如果没有使用虚拟环境,则不需重复安装。
安装好pyinstaller后,到项目的目录下,运行cmd,输入命令。

pyinstaller -F mainUI.py -p xmind_to_xls.py

-F 后是main文件,-p 后是自己编写的依赖py文件,多个文件使用;分隔。
使用python把xmind转换成excel测试用例的实现代码
使用python把xmind转换成excel测试用例的实现代码

因为是自己学习,所以直接把mainUI文件当做main文件。
注:如果运行打包后的exe文件包,报“xlwt no find”之类的错,请在主环境pip下载安装对应的库


# 总结 以上就是这几天学习的结果,感觉还是学习到了不少东西,希望能够帮助到你们

到此这篇关于使用python把xmind转换成excel测试用例的实现代码的文章就介绍到这了,更多相关python excel测试用例内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python Tkinter简单布局实例教程
Sep 03 Python
Python中文件操作简明介绍
Apr 13 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Python3 关于pycharm自动导入包快捷设置的方法
Jan 16 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Python如何对XML 解析
Jun 28 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 Python
python源文件的字符编码知识点详解
Mar 04 Python
Python Sqlalchemy如何实现select for update
Oct 12 #Python
浅析PyCharm 的初始设置(知道)
Oct 12 #Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 #Python
Django windows使用Apache实现部署流程解析
Oct 12 #Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 #Python
如何实现一个python函数装饰器(Decorator)
Oct 12 #Python
Vs Code中8个好用的python 扩展插件
Oct 12 #Python
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python浪漫表白源码
2019/04/05 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
python实现飞行棋游戏
2020/02/05 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
JAVA代码查错题
2014/10/10 面试题
vue+iview实现手机号分段输入框
2022/03/25 Vue.js