使用Python将xmind脑图转成excel用例的实现代码(一)

作者:晚风拂面 时间:2021-11-10 12:35:42 

最近接到一个领导需求,将xmind脑图直接转成可以导入的excel用例,并且转换成gui可执行的exe文件,方便他人使用。

因为对Python比较熟悉,所以就想使用Python3来实现这个功能,先理一下思路,首先要将xmind转换成Python可用的数据格式,正好找到了一个xmindparser库可以做这个事情,然后就好办了,用xlwt库写成xls文件,再用Python自带的gui库 tkinter来写 gui界面,最后用pyinstaller来打包。

计划分两个py文件来写,一个文件写excel ,一个文件写gui界面,因为需要导入的字段比较多,而且导入的格式有严格的要求,所以写excel的逻辑还是有点复杂的,所以我们确定xmind的文件有相应的格式来写,测试编号 测试需求 测试用例标题 测试用例执行步骤 测试用例预期结果 测试用例预置条件都要按照相应的格式来。格式如图

使用Python将xmind脑图转成excel用例的实现代码(一)

通过xmindparser解析出来的格式是这样的,是Python的字典加列表的格式

使用Python将xmind脑图转成excel用例的实现代码(一)


from xmindparser import xmind_to_dict
import re
import xlwt

class xmind_to_xls():
def xmind_num(self,value):
 """获取xmind标题个数"""
 try:
  return len(value['topics'])
 except KeyError:
  return 0

def xmind_title(self,value):
 """获取xmind标题内容"""
 return value['title']

def xmind_cat(self,filename):
 '''调试函数,打印内容用的'''
 self.out = xmind_to_dict(filename)
 self.story = self.out[0]['topic']['topics']
 self.num=len(self.story)
 print(self.out)
 print(self.out[0]['topic']['title'])
 return self.story,self.num

def write_excel(self,xmind_file,servicename='',editionname='',performer=''):
 '''生成excel文件函数'''
 self.f=xlwt.Workbook()
 self.sheet1 =self.f.add_sheet('sheet1',cell_overwrite_ok=True)
 self.row0 = ["storyid", '需求名称', '测试用例名称', '执行步骤', '预期结果', '服务名称', '版本', '执行人员']
 #生成第一行
 for i in range(0,len(self.row0)):
  self.sheet1.write(0,i,self.row0[i])
 self.out = xmind_to_dict(xmind_file)
 self.xls_name=self.out[0]['topic']['title']
 self.story = self.out[0]['topic']['topics']
 self.storynum = len(self.story)
 j=1 #用例计算器
 z = 0 # 用例结果数计数器
 for i in range(0, self.storynum):
  self.storyname = self.story[i]['title']
  print(self.storyname)
  self.regex_str = ".*[\[【](.+?)[\]】].*"
  self.storyid_reg = re.match(self.regex_str, self.storyname)
  if self.storyid_reg:
   self.storyid=self.storyid_reg.group(1)#正则取出用例编号
   #print(self.storyid_reg.group(1))
  self.testcase_num=self.xmind_num(self.story[i]['topics'][0])
  for k in range(0,self.testcase_num):
   self.testcase=self.story[i]['topics'][0]['topics'][k]
   self.testcase_name =self.xmind_title(self.testcase)
   self.testcase_stepnum=self.xmind_num(self.testcase) #每个用例的步骤数量
   self.sheet1.write(k + i + z + j, 2, self.testcase_name)
   self.sheet1.write(k + i + z + j, 0, self.storyid)
   self.sheet1.write(k + i + z + j, 1, self.storyname)
   self.sheet1.write(k + i + z + j, 5, servicename)
   self.sheet1.write(k + i + z + j, 6, editionname)
   self.sheet1.write(k + i + z + j, 7, performer)
   for x in range(0,self.testcase_stepnum):
    self.testcase_step=self.testcase['topics'][x]
    self.teststep_title=self.xmind_title(self.testcase_step) #用例步骤名称
    self.teststep_num=self.xmind_num(self.testcase_step) #用例步骤个数
    if self.teststep_num != 0:
     for y in range(0,self.teststep_num):
      self.test_results=self.testcase_step['topics'][y]
      self.test_result=self.xmind_title(self.test_results)#用例结果
      self.sheet1.write(k + i + z + j+y+1, 3, self.teststep_title)
      self.sheet1.write(k + i + z + j + y+1, 4, self.test_result)
     z = z + y+1
    else:
     self.test_result=' '
     self.sheet1.write(k + i + z + j+1 , 3, self.teststep_title)
     self.sheet1.write(k + i + z + j+1 , 4, self.test_result)
     z = z + 1
  j=j+k
 self.f.save(self.xls_name+'.xls') #xls名称取xmind主题名称

if __name__ == '__main__':
 xmind_file = "C:\\Users\\Administrator\\Desktop\\版本测试.xmind" # xmind文件
 servicename='aa'
 editionname='bb'
 performer='cc'
 #xmind_to_xls().write_excel(xmind_file,servicename,editionname,performer)
 xmind_to_xls().xmind_cat(xmind_file)

来源:https://www.cnblogs.com/xu-xu/articles/11999960.html

标签:Python,xmind,excel
0
投稿

猜你喜欢

  • Python读取大型数据文件的6种方式汇总

    2021-06-29 12:19:33
  • Python实现输出某区间范围内全部素数的方法

    2022-04-25 10:04:50
  • DW实现滚动新闻

    2007-12-03 11:35:00
  • python获取网页中所有图片并筛选指定分辨率的方法

    2021-07-28 04:57:23
  • django框架实现模板中获取request 的各种信息示例

    2023-08-31 05:16:41
  • OBJECTPROPERTY与sp_rename更改对象名称的介绍

    2012-01-29 18:04:39
  • 实例讲解Python3中abs()函数

    2023-06-14 02:21:55
  • 微信小程序 支付功能实现PHP实例详解

    2023-11-19 08:53:36
  • python编码问题汇总

    2023-10-02 08:05:54
  • php strstr查找字符串中是否包含某些字符的查找函数

    2023-11-17 01:42:23
  • 如何在MySQL查询结果集中得到记录行号

    2008-12-17 15:00:00
  • Javascript 中对中文长度对行判断

    2009-07-05 18:39:00
  • python进行OpenCV实战之画图(直线、矩形、圆形)

    2022-05-30 06:36:05
  • 千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码

    2023-08-19 20:33:57
  • Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例

    2023-11-27 21:26:53
  • 优雅管理Go Project生命周期

    2023-06-16 01:10:42
  • YUI3设计中的激进和妥协

    2010-01-17 09:59:00
  • python文件和目录操作方法大全(含实例)

    2021-11-11 14:10:29
  • sql存储过程获取汉字拼音头字母函数

    2011-11-03 16:58:05
  • python程序 线程队列queue使用方法解析

    2021-11-16 18:43:02
  • asp之家 网络编程 m.aspxhome.com