​Python 使用Xmind转换为excel 小工具​

1. 前言

测试经常使用xmind进行需求分析,再根据需求分析转换为excel,这样的效率比较低,我们可以直接使用xmind转换为excel,省去重复的测试工作,提升效率

2. xmind 导入excel 的方式需安装博主提供的格式来,源码只支持当期的格式,如下:

 3. 实现源码--转换为excel如下:

 安装:pip3 install xmindparser  ,xmind转换dict,提取节点

 

# --*-- conding:utf-8 --*--
# @Time : 2022-05-22 14:10# @File : runExcel.py
# @Software : PyCharm

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 = [10, 11, 30, 60, 50, 11, 11]

        se = XlwtSeting()
        style = se.styles()
        style.alignment = se.alignments(**dicts)
        style.font = se.fonts(bold=True)
        style.borders = se.borders()
        style.pattern = se.patterns(17)
        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 XmindToXlsx(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 + ".xlsx")

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

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

    @staticmethod
    def xmind_makers(value):
        """获取xmind标题内容"""
        return value["makers"][0]

    def write_excel(self):
        """生成excel文件的方法"""
        row0 = ["系统模块", '需求名称', '用例名称','测试步骤', '预期结果', '优先级','适用阶段']
        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)
            try:
                if modnum != 0:
                    for j in range(modnum):
                        try:
                            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)  # 执行步骤有几个
                                    try:
                                        if c1 != 0:
                                            for n in range(c1):
                                                x += 1
                                                test_step = test_case["title"]
                                                test_except = test_case["topics"][0]
                                                self.heights(self.worksheet, x, size=2)
                                                sys = self.xmind_title(self.xm)  # 系统模块
                                                mod = self.xmind_title(test_module) # 测试需求名称
                                                case = self.xmind_title(test_suit) # 测试用例名称
                                                step = test_step  # 执行步骤
                                                exce = self.xmind_title(test_except)  # 预期结果

                                                self.worksheet.write(x, 0, sys, style)  # 系统模块
                                                self.worksheet.write(x, 1, mod, style)  # 测试需求名称
                                                self.worksheet.write(x, 2, case, style)  # 测试用例名称
                                                self.worksheet.write(x, 3, step, style)  # 写入执行步骤
                                                self.worksheet.write(x, 4, exce, style)  # 写入预期结果
                                                try:
                                                    if 'priority-1' in self.xmind_makers(test_suit):
                                                        self.worksheet.write(x, 5, 'P0', style)  # 优先级
                                                        self.worksheet.write(x, 6, '冒烟用例', style)  # 适用阶段
                                                    elif 'priority-2' in self.xmind_makers(test_suit):
                                                        self.worksheet.write(x, 5, 'P2', style)  # 优先级
                                                        self.worksheet.write(x, 6, '功能用例', style)  # 适用阶段
                                                except Exception as msg:
                                                    self.worksheet.write(x, 5, 'P2', style)  # 优先级
                                                    self.worksheet.write(x, 6, '功能用例', style)  # 适用阶段
                                                    # print(f'没有标记用例级别,请处理{msg}')
                                    except Exception as msg:
                                        # print(f"测试用例没有操作步骤及预期结果{msg}")
                                        pass
                        except Exception as msg:
                            print(f"没有测试用例{msg}")
            except Exception as msg:
                print(f"没有测试套件{msg}")

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

if __name__ == "__main__":
    name = 'xmindTol.xmind'
    xx = XmindToXlsx(name)
    xx.write_excel()

4. 执行如上的源码后,自动在当前根目录下生成以测试系统+xlsx 的文件名

  5. 生成GUI可视化小工具,需要使用tkinter,把之前封装的方法需要的参数,关联起来进行打包

import tkinter
import re
from tkinter.filedialog import askopenfilename
from tkinter import messagebox
from Project.TestCase.XmindToExcel.runExcel import XmindToXlsx  # 导入上步的源码


class MainUI(object):

    def __init__(self, title="fezs", 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()
        print(f"地址:{path}")
        regvalue = '.*\.xmind$'
        xmind_reg = re.match(regvalue, path)
        if xmind_reg:
            # xmind转换成xls
            XmindToXlsx(path)
        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布局,按钮显示在第一行,第三列

        # 提交按钮
        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="fezs")

 6.  打包 -- 在线安装  pip install pyinstaller ,使用pyinstaller 打包文件

pyinstaller -F mainUI.py -p runExcel.py

-F 后是main文件,-p 后是自己编写的依赖py文件,多个文件使用;分隔。

执行完小工具后,在当前dist目录下生成excel文件

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将Xmind转换成Excel测试用例,可以使用Python编程语言进行自动化操作。下面是一个简单的步骤: 1. 安装所需的Python库:首先,需要安装一些Python库以便处理XmindExcel文件。可以使用pip命令安装openpyxl和xmindparser库:`pip install openpyxl xmindparser` 2. 导入所需的库:在Python脚本中,导入openpyxl和xmindparser库以及其他可能需要的库文件: ```python import openpyxl import xmindparser ``` 3. 解析Xmind文件:使用xmindparser库将Xmind文件解析为Python对象,以便进一步处理: ```python xmind_file = xmindparser.load("path_to_xmind_file.xmind") ``` 4. 创建Excel文件和工作表:使用openpyxl库创建一个Excel文件并添加一个工作表: ```python excel_file = openpyxl.Workbook() sheet = excel_file.active ``` 5. 遍历Xmind对象并写入Excel文件:使用循环遍历Xmind对象的各个部分,并将它们写入Excel文件中的相应位置。具体如何遍历和写入将根据Xmind文件的结构而定,以下是一个示例: ```python for topic in xmind_file[0]["topic"]["topics"]: sheet.cell(row=row_num, column=1, value=topic["title"]) for subtopic in topic["topics"]: sheet.cell(row=row_num, column=2, value=subtopic["title"]) row_num += 1 ``` 6. 保存并关闭Excel文件:在完成写入后,使用openpyxl库的save方法将Excel文件保存在磁盘上,并使用close方法关闭文件: ```python excel_file.save("path_to_excel_file.xlsx") excel_file.close() ``` 通过以上步骤,就能够使用PythonXmind转换Excel测试用例。根据实际需求,可能需要进一步处理和调整代码,例如设置样式、添加其他信息等。 ### 回答2: Python可以使用一些库和工具Xmind格式的思维导图转换Excel测试用例。下面介绍一种常见的方法: 1. 首先,我们需要安装并导入相关库,例如`xlwt`用于创建Excel文件、`xmind`用于读取Xmind文件等。 ```python import xlwt from xmindparser import xmind_to_dict ``` 2. 接下来,我们需要将Xmind文件加载并转换为字典。这可以通过`xmind_to_dict`函数来实现。 ```python xmind_file = 'path/to/xmind_file.xmind' data = xmind_to_dict(xmind_file) ``` 3. 现在,我们可以通过遍历字典中的内容来提取测试用例的相关信息,并将其存储到Excel文件中。 ```python workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Test Cases') # 写入表头 header = ['用例名称', '用例编号', '前置条件', '步骤', '预期结果'] for col, name in enumerate(header): worksheet.write(0, col, name) # 遍历Xmind字典 def parse_xmind(data, row): for item in data: if 'topic' in item: topic = item['topic'] case_name = topic['title'] case_id = topic['id'] precondition = '' # 前置条件 steps = '' # 步骤 expected_result = '' # 预期结果 # 检查是否存在子主题 if 'topics' in topic: for sub_topic in topic['topics']: if 'title' in sub_topic: title = sub_topic['title'] if title == '前置条件': precondition = sub_topic['topics'][0]['title'] elif title == '步骤': for step in sub_topic['topics']: steps += step['topics'][0]['title'] + '\n' elif title == '预期结果': for result in sub_topic['topics']: expected_result += result['topics'][0]['title'] + '\n' # 将用例信息写入Excel worksheet.write(row, 0, case_name) worksheet.write(row, 1, case_id) worksheet.write(row, 2, precondition) worksheet.write(row, 3, steps) worksheet.write(row, 4, expected_result) row += 1 # 递归处理子主题 if 'topics' in topic: row = parse_xmind(topic['topics'], row) return row # 开始处理Xmind数据 row = parse_xmind(data, 1) # 保存Excel文件 workbook.save('path/to/test_cases.xls') ``` 以上是将Xmind转换Excel测试用例的一个简单示例。通过解析Xmind文件的层级结构,并针对每个主题提取相应的信息,我们可以轻松地生成Excel文件,其中包含测试用例的名称、编号、前置条件、步骤和预期结果等内容。 ### 回答3: Python提供了丰富的第三方库和工具,可以帮助我们实现将XMind转换成Excel测试用例的功能。下面是一个简单的示例代码,用于将XMind文件中的测试用例转换成Excel格式: 1. 首先,我们需要使用Python中的xlwt库来创建Excel文件并写入测试用例数据。 ```python import xlwt from xmindparser import xmind_to_dict def convert_xmind_to_excel(xmind_file, excel_file): # 读取XMind文件 workbook_dict = xmind_to_dict(xmind_file) # 创建Excel文件 workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Test Cases') # 写入表头 headers = ['Test Case ID', 'Test Case Name', 'Steps', 'Expected Result'] for index, header in enumerate(headers): worksheet.write(0, index, header) # 写入测试用例数据 row = 1 for sheet in workbook_dict['sheets']: for topic in sheet['rootTopic']['topics']: test_case_id = topic['title'] test_case_name = topic['topics'][0]['title'] steps = topic['topics'][0]['topics'][0]['title'] expected_result = topic['topics'][0]['topics'][0]['topics'][0]['title'] worksheet.write(row, 0, test_case_id) worksheet.write(row, 1, test_case_name) worksheet.write(row, 2, steps) worksheet.write(row, 3, expected_result) row += 1 # 保存Excel文件 workbook.save(excel_file) ``` 2. 在上述代码中,我们使用了`xmindparser`库来解析XMind文件,需要使用`pip install xmindparser`命令来安装该库。 3. `convert_xmind_to_excel`函数接受两个参数,分别是XMind文件路径以及要保存的Excel文件路径。 4. 函数首先使用`xmind_to_dict`函数将XMind文件解析成一个字典,然后创建一个Excel对象。 5. 接下来,我们按照Excel的格式,将测试用例的数据逐行写入Excel文件,包括测试用例ID、名称、步骤和预期结果。 6. 最后,使用`workbook.save(excel_file)`保存Excel文件。 通过以上代码,我们可以将XMind文件中的测试用例转换成Excel格式,方便进行测试用例管理和执行。当然,根据实际需求,还可以根据XMind文件的结构进行更复杂的操作,例如解析不同分支、处理更多层级的数据等。可以根据具体情况对代码进行适当的优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值