使用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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
Python with的用法
Aug 22 Python
centos 下面安装python2.7 +pip +mysqld
Nov 18 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Python端口扫描简单程序
Nov 10 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python中max函数用于二维列表的实例
Apr 03 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
python区块及区块链的开发详解
Jul 03 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
python中os包的用法
Jun 01 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简单读取xml文件的方法示例
2017/04/20 PHP
jQuery中after()方法用法实例
2014/12/25 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
C语言基础笔试题
2013/04/27 面试题
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
房地产销售大学生自我评价分享
2013/11/11 职场文书
生日寿宴答谢词
2014/01/19 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书