使用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访问纯真IP数据库的代码
May 19 Python
python算法学习之基数排序实例
Dec 18 Python
tornado捕获和处理404错误的方法
Feb 26 Python
python 创建弹出式菜单的实现代码
Jul 11 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
浅析python redis的连接及相关操作
Nov 07 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
python面向对象版学生信息管理系统
Jun 24 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
PHP中的串行化变量和序列化对象
2006/09/05 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php遍历CSV类实例
2015/04/14 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
python 实现有道翻译功能
2021/02/26 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
德国网上花店:Valentins
2018/08/15 全球购物
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
中间件的定义
2016/08/09 面试题
公益活动策划方案
2014/01/09 职场文书
小学课外活动总结
2014/07/09 职场文书
地理信息科学专业推荐信
2014/09/08 职场文书
2014年向国旗敬礼活动总结
2014/09/27 职场文书
邀请函范文
2015/02/02 职场文书
单位证明范文
2015/06/18 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs