groovy:XmlParser 读 Freeplane.mm文件,生成测试案例.csv文件

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

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

思维导图最基本的功能就是新增节点了,Freeplane 通过 Enter 和 Tab 分别新建同级节点和下一级节点。

除了使用上述的基本节点功能外,Freeplane 还提供了 总结节点 的功能,选择一些节点,通过 编辑 -> 新增节点 -> 新增总节点 来增加总结节点。

先编写一个测试脚本 test_xmlParser.groovy 如下

java 复制代码
import groovy.util.XmlParser

class Example {
   static void main(String[] args) {
      if (args.size() <1){
          println " usage: groovy test_xmlparser file1.mm ";
          return
      }
      def file1 = args[0]; 
      def parser = new XmlParser();
      def doc = parser.parse(file1);
      doc.node.each{ it ->
        println("${it['@TEXT']}");
        it.node.each{ it1 ->
           println("${it1['@TEXT']}");
           it1.node.each{ it2 ->
              println("${it2['@TEXT']}");
              it2.node.each{ it3 ->
                 println("${it3['@TEXT']}");
                 it3.node.each{ it4 ->
                    println("${it4['@TEXT']}");
                    it4.node.each{ it5 ->
                       println("${it5['@TEXT']}");
                    }
                 }
              }
           }
        }
      }
   }
}

运行 groovy test_xmlParser.groovy root_node.mm

对于node元素本身,我们使用@符号显示附加到node元素的TEXT属性。

再编写 mm_xmlParser_csv.groovy 如下

java 复制代码
import groovy.util.XmlParser
// XmlParser 读 Freeplane.mm文件,生成测试案例.csv文件
//zd?:字段?的拼音缩写
//zd1: 应用系统名的英文或拼音缩写
//zd2: 模块名
//zd3: 正向 或 反向
//zd4: 功能名
//zd5: 执行步骤
//zd6: 预期结果
// Freemind map file1 -> XmlParser => file2.csv
class FmmXmlParser {
   static void main(String[] args) {
      if (args.size() <1){
          println " usage: groovy test_xmlparser file1.mm ";
          return;
      }
      def f1 = args[0];
      File file1 = new File(f1);
      if (!file1.exists()) {
          println(f1 +" not found.");
          return;
      }
      def f2 = f1.replace('.mm','.csv')
      if (f1.equals(f2)){
          println 'file.ext is not .mm';
          return;
      }
      File file2 = new File(f2);
      def fp = file2.newPrintWriter();
      fp.println "应用系统名,测试功能描述,正反向,执行步骤,预期结果";
      
      def parser = new XmlParser();
      def doc = parser.parse(f1);
      
      String zd1,zd2,zd3,zd4,zd5,zd6,txt,csgnms;
      doc.node.each{ it ->
        zd1 = "${it['@TEXT']}";
        it.node.each{ it2 ->
           zd2 = "${it2['@TEXT']}";
           it2.node.each{ it3 ->
              zd3 = "${it3['@TEXT']}";
              it3.node.each{ it4 ->
                 zd4 = "${it4['@TEXT']}";
                 it4.node.each{ it5 ->
                    txt = "${it5['@TEXT']}";
                    if (txt.startsWith("步骤")){
                        zd5 = txt.substring(3);
                    } else if (txt.startsWith("预期结果")){
                        zd6 = txt.substring(5);
                        csgnms = zd2 +'-'+ zd4; //测试功能描述
                        fp.println "${zd1},${csgnms},${zd3},${zd5},${zd6}";
                    } else {
                        zd5=''; zd6='';
                    }                   
                 }
              }
           }
        }
      }
      fp.flush();
      fp.close();
      println "gen: "+ f2;
   }
}

运行 groovy mm_xmlParser_csv root_node.mm

java 复制代码
应用系统名,测试功能描述,正反向,执行步骤,预期结果
root节点,模块1-功能11,正向,1.步骤,1.结果
root节点,模块1-功能12,正向,2.步骤,2.结果
root节点,模块1-功能11,反向,3.步骤,3.结果
root节点,模块1-功能12,反向,4.步骤,4.结果
root节点,模块2-功能21,正向,5.步骤,5.结果
root节点,模块2-功能22,正向,6.步骤,6.结果
root节点,模块2-功能21,反向,7.步骤,7.结果
root节点,模块2-功能22,反向,8.步骤,8.结果
相关推荐
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了5 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言