ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python实现xmind8转excel

2022-04-23 19:35:03  阅读:245  来源: 互联网

标签:case title python sonroot excel xmind8 用例 xmind root


python实现xmind8转excel

 

 

 

 

使用方法说明:

1、xmind上的一条用例的用例步骤和预期结果必须是要写在一行,切勿分多行描述步骤或预期结果,如果有前置条件的,需要标记蓝色感叹号且以“前置条件”4个字开头,如下图:

 

 

 

代码展示:

import xmindparser
import xlwt, xlrd
from xlutils.copy import copy
from xmindparser import xmind_to_dict
import time
a = time.time()
timestp=str(a).split('.')[0]

# xmindparser配置
xmindparser.config = {
            'showTopicId': False, # 是否展示主题ID
            'hideEmptyValue': True # 是否隐藏空值
        }

filePath = '测试.xmind'

def traversal_xmind(root, rootstring, lisitcontainer):
    """
    功能:递归dictionary文件得到容易写入Excel形式的格式。
    注意:rootstring都用str来处理中文字符
    @param root: 将xmind处理后的dictionary文件
    @param rootstring: xmind根标题
    """
    if isinstance(root, dict):
        if 'title' in root.keys() and 'topics' in root.keys():
            traversal_xmind(root['topics'], str(rootstring), lisitcontainer)
        if 'title' in root.keys() and 'topics' not in root.keys():
            traversal_xmind(root['title'], str(rootstring), lisitcontainer)
    elif isinstance(root, list):
        for sonroot in root:
            # traversal_xmind(sonroot, str(rootstring) + "&" + sonroot['title'], lisitcontainer)
            #print('sonroot:',sonroot)
            if 'makers' in sonroot and 'title'  in sonroot :
                # print('sonroot:',sonroot)
                # print('root[1]:', root[1])
                if 'topics' in root[1]:
                    traversal_xmind(sonroot, str(rootstring) + "&" + sonroot['title']+ "&"+root[1]['title']+ "&"+root[1]['topics'][0]['title'], lisitcontainer)
            else:
                traversal_xmind(sonroot, str(rootstring) + "&" + sonroot['title'], lisitcontainer)

    elif isinstance(root, str):
        # lisitcontainer.append(str(rootstring.replace('\n', '')))  # 此处是去掉一步骤多结果情况直接拼接
        lisitcontainer.append(str(rootstring))  # 此处是一步骤多结果时,多结果合并

def get_case(root):
    rootstring = root['title']
    lisitcontainer = []
    traversal_xmind(root, rootstring, lisitcontainer)
    # for lisitcontaine in lisitcontainer:
    #     print(lisitcontaine)
    return lisitcontainer

def deal_excle(filename):
    '''
    tapd导入用例必须使用自有模板,因为此处复制模板Excel后生成新表
    :param filename: 模板地址
    :return:
    '''

    workbook = xlrd.open_workbook(filename)
    readbook = copy(workbook)
    idx = workbook.sheet_names()[0]
    # print('idx:', idx)
    # print('root001:',root)
    readbook.get_sheet(idx).name = str(root["title"])
    worksheet = readbook.get_sheet(0)

    return readbook, worksheet

def write_sheet(b, casename, casestep,expectresult):
    Worksheet.write(b, 0, casename)  # 用例名称
    Worksheet.write(b, 1, casestep)  # 用例步骤
    Worksheet.write(b, 2, expectresult)  # 预期结果

def deal_with_list(case_list):
    '''
    处理从xmind转换过来的用例list,并写入Excel中
    :param list: 传入从xmind转换好的用例列表
    :return:
    '''

    b = 1  # 记录写了多少行
    for row_case in case_list:
        case = row_case.split("&") # 用‘&’分隔,存在list中,这是一条用例
        caselength = len(case)
        if '前置条件' in row_case:
            casename = ''
            for i in range(0, caselength - 3):
                casename += case[i]  # 用例标题,(默认为从倒数第4个下标往前都是用例标题)
            casestep = case[-3] + ', 步骤:' + case[-2] # 用例步骤,(倒数第2个下标是步骤,倒数第3个下标识前置条件(必须有前置条件)
            expectresult = case[-1]  # 预期结果,(倒数第1个下标是预期结果)
            write_sheet(b, casename, casestep, expectresult)  # 写入Excel

        else:
            casename = ''
            for i in range(0, caselength - 2):
                casename += case[i]  # 用例标题,(无前置条件的情况下,默认为从倒数第3个下标往前都是用例标题)
            casestep = ' 步骤:' + case[-2] # 用例步骤,(倒数第2个下标是步骤)
            expectresult = case[-1]  # 预期结果,(倒数第1个下标是预期结果)
            write_sheet(b, casename, casestep, expectresult)  # 写入Excel

        b=b+1

if __name__ == '__main__':
    filePath = '报表需求用例.xmind'
    #file_name = 'case模板.xls'
    # 创建一个Workbook对象 编码encoding
    Workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)
    # 添加一个sheet工作表、sheet名命名为Sheet1、cell_overwrite_ok=True允许覆盖写
    Worksheet = Workbook.add_sheet('Sheet1', cell_overwrite_ok=True)
    Worksheet.write(0, 0, '用例名称')
    Worksheet.write(0, 1, '操作步骤')
    Worksheet.write(0, 2, '预期结果')

    root = xmind_to_dict(filePath)[0]['topic'] # 解析成dict数据类型xmindparser.xmind_to_dict(filePath)
    print('root:',root)
    case_list = get_case(root)
    print('case:',case_list)
    deal_with_list(case_list)
    # Excel表保存的文件名字
    path='C:\\Users\\Dora_dora\\Desktop\\' + root["title"]+timestp + ".xls"
    Workbook.save(path)  # 此处可以填写生成位置
    #转换成csv格式文件
    # import pandas as pd
    # df = pd.read_excel('报表需求1650709981.xls')
    # df.to_csv('root["title"]+timestp.csv', index=False)

 

标签:case,title,python,sonroot,excel,xmind8,用例,xmind,root
来源: https://www.cnblogs.com/doradora/p/16183333.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有