使用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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
python用户管理系统
Mar 13 Python
Python变量赋值的秘密分享
Apr 03 Python
python3去掉string中的标点符号方法
Jan 22 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
Python json格式化打印实现过程解析
Jul 21 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 文件扩展名 获取函数
2009/06/03 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
HTML的select控件美化
2017/03/27 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
python使用cPickle模块序列化实例
2014/09/25 Python
独特的python循环语句
2016/11/20 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
python url 参数修改方法
2018/12/26 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
C语言编程题
2015/03/09 面试题
金融事务专业求职信
2014/04/25 职场文书
保护环境建议书100字
2014/05/13 职场文书
交通事故和解协议书
2014/09/25 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
接收函格式
2015/01/30 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书