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

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

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

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

  1.  
  1. 从这里我们可以分析出来xmind的格式的两个属性是我们用的,title topics ,其中title是我们要的内容,topics是内容的个数,这里可以封装两个函数来用,代码我贴出来,因为要求的xls格式不一样
    所以具体的逻辑还要具体的去写,我是按照我们工具要求的excel格式来写的,可以给大家参考一下,你们需要什么格式可以在write_excel函数里面调整逻辑.
    下一篇再把tkinter设计的gui代码以及如何用pyintaller打包成exe贴上来。注:以下代码都是在Python3环境下的
  1. 1 from xmindparser import xmind_to_dict
  2. 2 import re
  3. 3 import xlwt
  4. 4
  5. 5 class xmind_to_xls():
  6. 6 def xmind_num(self,value):
  7. 7 """获取xmind标题个数"""
  8. 8 try:
  9. 9 return len(value[\'topics\'])
  10. 10 except KeyError:
  11. 11 return 0
  12. 12
  13. 13 def xmind_title(self,value):
  14. 14 """获取xmind标题内容"""
  15. 15 return value[\'title\']
  16. 16
  17. 17 def xmind_cat(self,filename):
  18. 18 \'\'\'调试函数,打印内容用的\'\'\'
  19. 19 self.out = xmind_to_dict(filename)
  20. 20 self.story = self.out[0][\'topic\'][\'topics\']
  21. 21 self.num=len(self.story)
  22. 22 print(self.out)
  23. 23 print(self.out[0][\'topic\'][\'title\'])
  24. 24 return self.story,self.num
  25. 25
  26. 26 def write_excel(self,xmind_file,servicename=\'\',editionname=\'\',performer=\'\'):
  27. 27 \'\'\'生成excel文件函数\'\'\'
  28. 28 self.f=xlwt.Workbook()
  29. 29 self.sheet1 =self.f.add_sheet(\'sheet1\',cell_overwrite_ok=True)
  30. 30 self.row0 = ["storyid", \'需求名称\', \'测试用例名称\', \'执行步骤\', \'预期结果\', \'服务名称\', \'版本\', \'执行人员\']
  31. 31 #生成第一行
  32. 32 for i in range(0,len(self.row0)):
  33. 33 self.sheet1.write(0,i,self.row0[i])
  34. 34 self.out = xmind_to_dict(xmind_file)
  35. 35 self.xls_name=self.out[0][\'topic\'][\'title\']
  36. 36 self.story = self.out[0][\'topic\'][\'topics\']
  37. 37 self.storynum = len(self.story)
  38. 38 j=1 #用例计算器
  39. 39 z = 0 # 用例结果数计数器
  40. 40 for i in range(0, self.storynum):
  41. 41 self.storyname = self.story[i][\'title\']
  42. 42 print(self.storyname)
  43. 43 self.regex_str = ".*[\[【](.+?)[\]】].*"
  44. 44 self.storyid_reg = re.match(self.regex_str, self.storyname)
  45. 45 if self.storyid_reg:
  46. 46 self.storyid=self.storyid_reg.group(1)#正则取出用例编号
  47. 47 #print(self.storyid_reg.group(1))
  48. 48 self.testcase_num=self.xmind_num(self.story[i][\'topics\'][0])
  49. 49 for k in range(0,self.testcase_num):
  50. 50 self.testcase=self.story[i][\'topics\'][0][\'topics\'][k]
  51. 51 self.testcase_name =self.xmind_title(self.testcase)
  52. 52 self.testcase_stepnum=self.xmind_num(self.testcase) #每个用例的步骤数量
  53. 53 self.sheet1.write(k + i + z + j, 2, self.testcase_name)
  54. 54 self.sheet1.write(k + i + z + j, 0, self.storyid)
  55. 55 self.sheet1.write(k + i + z + j, 1, self.storyname)
  56. 56 self.sheet1.write(k + i + z + j, 5, servicename)
  57. 57 self.sheet1.write(k + i + z + j, 6, editionname)
  58. 58 self.sheet1.write(k + i + z + j, 7, performer)
  59. 59 for x in range(0,self.testcase_stepnum):
  60. 60 self.testcase_step=self.testcase[\'topics\'][x]
  61. 61 self.teststep_title=self.xmind_title(self.testcase_step) #用例步骤名称
  62. 62 self.teststep_num=self.xmind_num(self.testcase_step) #用例步骤个数
  63. 63 if self.teststep_num != 0:
  64. 64 for y in range(0,self.teststep_num):
  65. 65 self.test_results=self.testcase_step[\'topics\'][y]
  66. 66 self.test_result=self.xmind_title(self.test_results)#用例结果
  67. 67 self.sheet1.write(k + i + z + j+y+1, 3, self.teststep_title)
  68. 68 self.sheet1.write(k + i + z + j + y+1, 4, self.test_result)
  69. 69 z = z + y+1
  70. 70 else:
  71. 71 self.test_result=\' \'
  72. 72 self.sheet1.write(k + i + z + j+1 , 3, self.teststep_title)
  73. 73 self.sheet1.write(k + i + z + j+1 , 4, self.test_result)
  74. 74 z = z + 1
  75. 75 j=j+k
  76. 76 self.f.save(self.xls_name+\'.xls\') #xls名称取xmind主题名称
  77. 77
  78. 78 if __name__ == \'__main__\':
  79. 79 xmind_file = "C:\\Users\\Administrator\\Desktop\\版本测试.xmind" # xmind文件
  80. 80 servicename=\'aa\'
  81. 81 editionname=\'bb\'
  82. 82 performer=\'cc\'
  83. 83 #xmind_to_xls().write_excel(xmind_file,servicename,editionname,performer)
  84. 84 xmind_to_xls().xmind_cat(xmind_file)

 

版权声明:本文为xu-xu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xu-xu/articles/11999960.html