xmind转excel的过程

(1)、读取xmind中的内容,使用xmindparser第三方库实现xmind内容的读取
(2)、将内容进行处理后保存至excel中,而本次使用的是pandas库将内容存储到excel中。

脚本中使用到的第三方库

脚本适用的xmind格式

读取xmind中的内容

读取xmind中的内容并将内容按行的形式保存至列表中,其中要求xmind中必须要标记优先级,否则将会抛出自定义异常。如下

class ReadXmind:def __init__(self) -> None:self.__path = Noneself.__title_list = []def __read_xmind(self) -> list:"""读取xmind文件内容Returns: 列表"""return xmind_to_dict(self.__path)def __get_content(self, topics: list, titles: list) -> None:"""获取每个分支主题中的标题内容并保存至主主题标题文本列表中Args:topics: 所有分支主题,格式:listtitles: 主主题中的标题文本,格式:listReturns: None"""for topic in topics:tmp_title = copy.deepcopy(titles)  # 将titles列表复制成一个临时变量中if "topics" in topic:   # 如果该分支主题存在子分支主题tmp_title.append(topic["title"])   # 将该分支主题标题添加至列表临时变量中self.__get_content(topic["topics"], tmp_title)  # 回调该函数,获取该分支主题下其他分支主题内容else:  # 如果该分支主题不存在子分支主题tmp_title.append(topic["title"])  # 将该分支主题标题添加至列表临时变量中if "makers" in topic:   # 该分支主题存在标记# 过滤出优先级标记 , 并取出优先级的值priority = ''.join(list(filter(lambda x: 'priority' in x, topic["makers"])))[-1]tmp_title.append({'priority': priority})  # 将优先级以字典的形式添加至列表临时变量中else:raise MarkerError(f"<{tmp_title[0]}>-<{tmp_title[1]}>-<{tmp_title[2]}>-<{tmp_title[3]}>中未标记优先级")self.__title_list.append(tmp_title)def content(self, x_path: str) -> list:"""获取xmind文件中每个主题的标题内容Args:x_path: xmind文件路径及文件名称Returns: 标题内容列表"""self.__path = x_pathtopics = self.__read_xmind()for topic in topics:if "topics" not in topic['topic']:raise TopicError(f"<{topic['topic']['title']}>主题无分支主题")self.__get_content(topic['topic']['topics'], [topic['topic']['title']])return self.__title_listdef get_title_list(self):"""获取标题列表数据Returns: 标题列表"""return self.__title_list

处理读取的xmind数据

因xmind中的内容只有topic和title 信息,在转换的刚才中无法知晓哪个节点属于哪块内容,故在提取数据时采用的是人为标记节点标题的方式。

def data_process(data_list) -> list:"""数据处理Args:data_list: 待处理的数据列表Returns: 处理完成的数据列表"""result = []for index, data in enumerate(data_list):priority = data[-1]['priority']  # 优先级applicable_stage = '系统测试阶段\n冒烟测试阶段' if priority == '1' else '系统测试阶段'   # 测试阶段pre_condition_index = element_index(data, ('前置条件', '预置条件', '前提条件'))   # 前置条件所在的位置title_index = element_index(data, ('业务', '功能', '其他'))   # 确定标题所在的位置# 判断是否存在标题,并对标题标识的文本加上【】符号if title_index != -1:data[title_index] = f'【{data[title_index]}】' if all(a not in data[title_index] for a in ['【', '】']) \else data[title_index]else:raise TextNotExistError(f"<{data[0]}> 中 业务/功能/其他 文本在内容中不存在")# 判断是否存在前置条件(前置条件需要写在标题和步骤之间)if pre_condition_index != -1:# 将('前置条件'\'预置条件')文本所在位置~步骤之间的主题值置为前置条件pre_condition = re.sub('(前置条件|预置条件|前提条件)(:|:)', '', ''.join(data[pre_condition_index: -3]))# 将('业务'\'功能'\'其他')文本所在位置~前置条件所在位置之间的主题值置为标题case_title = ''.join(data[title_index: pre_condition_index])else:pre_condition = ''case_title = ''.join(data[title_index: -3])  # 将('业务'\'功能'\'其他')文本所在位置~步骤之间的主题值置为标题case_module = '/'.join(data[: title_index])  # 所属模块(将主主题到标题所有在位置的主题合并为所属模块)case_step = data[-3]   # 步骤case_expect = data[-2]  # 预期result.append([case_module, case_title, pre_condition, case_step, case_expect, '', priority, '功能测试',applicable_stage])return resultdef element_index(data: list, search_key: tuple):""" 查找关键字在列表中的位置,多个关键字时前一个关键字匹配成功后,就返回下标Args:data: 待查询的列表数据search_key: 需要搜索的关键字Returns: 返回关键字在列表中的位置"""filter_value = list(filter(lambda d: any(a in d[1] for a in search_key), enumerate(data)))return -1 if len(filter_value) == 0 else filter_value[0][0]

将处理后的列表数据保存至excel

使用pandas 库将列表数据插入并保存到excel中;这需要数据处理结果中返回的是一个二维列表,且列表中每行需要有9列。

def to_excel(excel_name, data_list, sheet='sheet1'):""" 将列表数据保存至excel文档中Args:excel_name: excel文件的名称(包含路径;如果不包含路径则默认保存至当前项目路径是在文件夹)data_list: 待保存至excel中的数据列表sheet: 指定保存的sheet名称,默认名称为 sheet1Returns: None"""# 设置excel表格中的列名columns = ["所属模块", "用例标题", "前置条件", "步骤", "预期", "关键词", "优先级", "用例类型", "适用阶段"]df = pd.DataFrame([], columns=columns, index=[])for index, value in enumerate(data_process(data_list)):df.loc[index] = value# 保存excel 文档df.to_excel(excel_name, sheet, index=False)

脚本中使用到的自定义异常

class BasicValueError(ValueError):passclass MarkerError(BasicValueError):passclass TopicError(BasicValueError):passclass TextNotExistError(BasicValueError):pass

【Python】将xmind写的测试用例转成禅道可导入的excel格式相关推荐

  1. Python怎么去写单元测试用例去测试hello world呢

    逛着博客园,看到乙醇大佬的一篇随笔 https://www.cnblogs.com/nbkhic/p/9370446.html,于是就在想怎么测试这句hello world print('hello ...

  2. python实现xmind转excel_使用Python将xmind脑图转成excel用例(一)

    最近接到一个领导需求,将xmind脑图直接转成可以导入的excel用例,并且转换成gui可执行的exe文件,方便他人使用. 因为对Python比较熟悉,所以就想使用Python3来实现这个功能,先理一 ...

  3. Python写的代码打包成.exe可执行文件

    Python写的代码打包成.exe可执行文件 1. 安装pyinstaller 2. [在线生成icon](http://www.ico51.cn/) 3. 打包命令 pyinstaller -i x ...

  4. 打包可执行包_想把你写的Python程序发给别人用?打包成exe啊!

    前言 大家好,欢迎来到编程教室! 当你学了一段时间Python,终于写出一个小游戏的时候,是不是很想发给你的小伙伴分享一下你的成果?但是,如果直接将xx.py文件发给别人,别人通常是不能直接运行的,他 ...

  5. 怎么把python程序发给别人_想把你写的Python程序发给别人用?打包成exe啊!

    前言 大家好,欢迎来到编程教室! 当你学了一段时间Python,终于写出一个小游戏的时候,是不是很想发给你的小伙伴分享一下你的成果?但是,如果直接将xx.py文件发给别人,别人通常是不能直接运行的,他 ...

  6. 使用Python读取XMind格式测试用例,循环处理字符串

    首先贴上使用Xmind制作的测试用例格式范本 读取Xmind文件的代码为 ReadXmind = xmind_to_dict(FileName) 在读取Xmind编写的测试用例时,发现Python读取 ...

  7. 如何将Python写的代码打包成.exe可执行文件

    有时候我们需要将自己写的代码打包成exe文件,给别人使用需要怎么办呢?以下将讲解Python代码如何打包成.exe文件. 1. 下载pyinstaller 因为Python中有很多三方包,我们想要这些 ...

  8. python替换把写错的中文符号都替换成英文方法

    python替换把写错的中文符号都替换成英文方法 利用函数: def str_replace(self,data):""" 把写错的中文符号都替换成英文 "&q ...

  9. python xmind库_用Python解析XMind

    本文来自网易云社区 作者:孙圣翔 XMind是画思维脑图很好的工具,正好组里有个需要,是要将xmind画的状态图,转化成代码. 而用来解析xmind的库有个python的,还是官方出品的.不过真不愧是 ...

最新文章

  1. 数据库 sql 语句优化
  2. node + express + mongodb 手动配置
  3. Python常用模块之re模块
  4. 【Python】PAT-1024-科学计数法
  5. php 内核开发_深入理解PHP7内核之Reference
  6. mysql insert id的参数_Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)
  7. 组合体视图的画图步骤_(完整版)组合体视图画法教案
  8. 网络设备巨头优倍快的客户数据遭泄露
  9. Android的5样的调试信息
  10. Edge浏览器出现兼容性问题且所有页面崩溃,包括设置均无法打开并访问的解决方法
  11. C++关键字分析系列
  12. 【原创】企业级Linux环境部署(很全、很细)
  13. 学习笔记:LR语法分析
  14. 鸿蒙对比ios流畅,鸿蒙OS 2.0对比iOS 14:苹果流畅度完败?
  15. LuoguP4313 BZOJ3894 文理分科——最小割
  16. html word页面展示,word文档怎样调页面
  17. C++猜数字小游戏1.0.1版猜数字1.1---国庆特版(双人战斗版)
  18. laravel配置语言包,实现网站中英文切换
  19. 记一次中国移动家用宽带设置成支持IPv6网络的经历
  20. 输出这个整数对应的拼音

热门文章

  1. 清理电脑C盘空间的脚本
  2. 作为一名成熟的云原生布道师,我是这么写作的
  3. 【Lintcode】444. Graph Valid Tree II
  4. 时光雕刻着我们的青春
  5. 管家婆软件创建账套提示:创建账套失败
  6. (转载)验证下载下来的文件的完整性的方法
  7. 如何看待2022届秋招嵌入式开发岗位薪资大涨?
  8. 小程序预览加载不出图片
  9. ps中海报设计的设计思路
  10. linux maven 发布项目,Linux下基于Maven的自动化打包发布项目