• 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(')
    46. sys.exit(3)
    47. fr.close()
    48. # 读取文件 file_name
    49. R = getXmlData(f1)
    50. f2 = fn +'.csv'
    51. fp = codecs.open(f2, 'w', encoding='cp936')
    52. fp.write('应用系统名,测试功能描述,正反向,执行步骤,预期结果\n')
    53. # zd?:字段?的拼音缩写
    54. # zd1: 应用系统名的英文或拼音缩写
    55. # zd2: 模块名
    56. # zd3: 正向 或 反向
    57. # zd4: 功能名
    58. # zd5: 执行步骤
    59. # zd6: 预期结果
    60. for node in R:
    61. if node[1] ==1:
    62. zd1 = node[3]['TEXT']
    63. elif node[1] ==2:
    64. zd2 = node[3]['TEXT']
    65. elif node[1] ==3:
    66. zd3 = node[3]['TEXT']
    67. elif node[1] ==4:
    68. zd4 = node[3]['TEXT']
    69. elif node[1] ==5:
    70. txt = node[3]['TEXT']
    71. if txt.startswith('步骤'):
    72. zd5 = txt[3:]
    73. elif txt.startswith('预期结果'):
    74. zd6 = txt[5:]
    75. csgnms = '-'.join((zd2,zd4)) # 测试功能描述
    76. line = f'"{zd1}","{csgnms}","{zd3}","{zd5}","{zd6}"\n'
    77. fp.write(line)
    78. else:
    79. zd5 =''
    80. zd6 =''
    81. fp.close()
    82. print(f'gen: {f2}')

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

    运行 python fpmm_etree_csv.py your_test.mm

    生成 your_test.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所有节点

  • 相关阅读:
    GIT_工作3年后对GIT重新总结学习
    Linux 文件权限
    PHP:prim普里姆算法(附完整源码)
    探索贪心算法:解决优化问题的高效策略
    Flutter高仿微信-第42篇-创建群
    使用 TF-IDF 算法将文本向量化
    昨天步行的思考
    React中编写操作树形数据的自定义Hook
    【MATLAB】羽状图
    Qt实现动态桌面小精灵(含源码)
  • 原文地址:https://blog.csdn.net/belldeep/article/details/136272702