当前位置:   article > 正文

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。

强大的节点功能,不仅仅节点的种类很多,而且对于节点的编辑样式也丰富很多,比如数学公式、表格、HTML 的支持等;

思维导图最基本的功能就是新增节点了,Freeplane 通过 Enter 和 Tab 分别新建同级节点和下一级节点。
除了使用上述的基本节点功能外,Freeplane 还提供了 总结节点 的功能,选择一些节点,通过 编辑 -> 新增节点 -> 新增总节点 来增加总结节点。

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件。

编写 fpmm_etree_csv.py  如下.

  1. #-*- coding: UTF-8 -*-
  2. """ 读 Freeplane.mm文件,使用 xml.etree 生成测试案例.csv文件"""
  3. import os
  4. import sys
  5. import codecs
  6. import xml.etree.ElementTree as ET
  7. # 全局唯一标识 unique_id 缩写: uid
  8. uid = 1
  9. def walk(root_node, level, result_list):
  10. """ 遍历所有的节点 """
  11. global uid
  12. if root_node.tag == 'node':
  13. tmp_list = [uid, level, root_node.tag, root_node.attrib]
  14. result_list.append(tmp_list)
  15. uid += 1
  16. # 遍历每个子节点
  17. children_node = root_node.getchildren()
  18. if len(children_node) == 0:
  19. return
  20. for child in children_node:
  21. walk(child, level+1, result_list)
  22. return
  23. def getXmlData(file_name):
  24. level = 0 # 节点的深度
  25. result_list = []
  26. root = ET.parse(file_name).getroot()
  27. walk(root, level, result_list)
  28. return result_list
  29. # main()
  30. if len(sys.argv) ==2:
  31. f1 = sys.argv[1]
  32. else:
  33. print('usage: python fpmm_etree_csv.py file1.mm')
  34. sys.exit(1)
  35. if not os.path.exists(f1):
  36. print(f"{f1} is not exists.")
  37. sys.exit(2)
  38. fn,ext = os.path.splitext(f1)
  39. if ext.lower() != '.mm':
  40. print('ext is not .mm')
  41. sys.exit(2)
  42. fr = codecs.open(f1, mode='r', encoding="utf-8")
  43. # 读取第一行:
  44. line1 = fr.readline()
  45. if not line1.startswith('<map version='):
  46. print('it is not freemind map file.')
  47. sys.exit(3)
  48. fr.close()
  49. # 读取文件 file_name
  50. R = getXmlData(f1)
  51. f2 = fn +'.csv'
  52. fp = codecs.open(f2, 'w', encoding='cp936')
  53. fp.write('应用系统名,测试功能描述,正反向,执行步骤,预期结果\n')
  54. # zd?:字段?的拼音缩写
  55. # zd1: 应用系统名的英文或拼音缩写
  56. # zd2: 模块名
  57. # zd3: 正向 或 反向
  58. # zd4: 功能名
  59. # zd5: 执行步骤
  60. # zd6: 预期结果
  61. for node in R:
  62. if node[1] ==1:
  63. zd1 = node[3]['TEXT']
  64. elif node[1] ==2:
  65. zd2 = node[3]['TEXT']
  66. elif node[1] ==3:
  67. zd3 = node[3]['TEXT']
  68. elif node[1] ==4:
  69. zd4 = node[3]['TEXT']
  70. elif node[1] ==5:
  71. txt = node[3]['TEXT']
  72. if txt.startswith('步骤'):
  73. zd5 = txt[3:]
  74. elif txt.startswith('预期结果'):
  75. zd6 = txt[5:]
  76. csgnms = '-'.join((zd2,zd4)) # 测试功能描述
  77. line = f'"{zd1}","{csgnms}","{zd3}","{zd5}","{zd6}"\n'
  78. fp.write(line)
  79. else:
  80. zd5 =''
  81. zd6 =''
  82. fp.close()
  83. print(f'gen: {f2}')

请注意这一关键语句: children_node = root_node.getchildren()

运行 python fpmm_etree_csv.py root_node.mm

生成 root_node.csv

  1. 应用系统名,测试功能描述,正反向,执行步骤,预期结果
  2. "root节点","模块1-功能11","正向","1.步骤","1.结果"
  3. "root节点","模块1-功能12","正向","2.步骤","2.结果"
  4. "root节点","模块1-功能11","反向","3.步骤","3.结果"
  5. "root节点","模块1-功能12","反向","4.步骤","4.结果"
  6. "root节点","模块2-功能21","正向","5.步骤","5.结果"
  7. "root节点","模块2-功能22","正向","6.步骤","6.结果"
  8. "root节点","模块2-功能21","反向","7.步骤","7.结果"
  9. "root节点","模块2-功能22","反向","8.步骤","8.结果"

参考:python 使用xml.etree.ElementTree遍历xml所有节点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/157787
推荐阅读
相关标签
  

闽ICP备14008679号