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

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。
强大的节点功能,不仅仅节点的种类很多,而且对于节点的编辑样式也丰富很多,比如数学公式、表格、HTML 的支持等;
思维导图最基本的功能就是新增节点了,Freeplane 通过 Enter 和 Tab 分别新建同级节点和 Insert下一级节点。
除了使用上述的基本节点功能外,Freeplane 还提供了 总结节点 的功能,选择一些节点,通过 编辑 -> 新增节点 -> 新增总节点 来增加总结节点。
先编写一个测试脚本 test_xmlParser.groovy  如下

import groovy.util.XmlParserclass 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  如下

import groovy.util.XmlParser
// XmlParser 读 Freeplane.mm文件,生成测试案例.csv文件
// xt: 应用系统名的英文或拼音缩写
//zd?: 字段?的拼音缩写
//zd1: 模块名
//zd2: 功能名
//zd3: 正向 或 反向
//zd4: 测试要点
//zd5: 执行步骤
//zd6: 预期结果
//csylms:测试用例描述// Freemind map file1 -> XmlParser => file2.csv
class FmmXmlParser {static void main(String[] args) {if (args.size() <1){println " usage: groovy mm_xmlparser_csv 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 xt,zd1,zd2,zd3,zd4,zd5,zd6,txt,csylms;doc.node.each{ it ->xt = "${it['@TEXT']}";it.node.each{ it1 ->zd1 = "${it1['@TEXT']}";it1.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);csylms = zd2 +'-'+ zd4; //测试用例描述fp.println "${xt},${zd1},${csylms},${zd3},${zd5},${zd6}";} else {zd5=''; zd6='';}                   }}}}}}fp.flush();fp.close();println "gen: "+ f2;}
}

运行 groovy  mm_xmlParser_csv  your_test.mm

应用系统名,模块名,测试用例描述,正反向,执行步骤,预期结果
应用系统,模块1,功能11-测试要点111,正向,1.步骤,1.结果
应用系统,模块1,功能11-测试要点112,正向,2.步骤,2.结果
应用系统,模块1,功能11-要点111,反向,3.步骤,3.结果
应用系统,模块1,功能11-要点112,反向,4.步骤,4.结果
应用系统,模块2,功能21-测试要点211,正向,5.步骤,5.结果
应用系统,模块2,功能21-测试要点212,正向,6.步骤,6.结果
应用系统,模块2,功能21-要点211,反向,7.步骤,7.结果
应用系统,模块2,功能21-要点212,反向,8.步骤,8.结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498047.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 安装

JMeter是Java的框架&#xff0c;因此在安装Jmeter前需要先安装JDK&#xff0c;此处安装以Windows版为例 1. 安装jdk&#xff1a;Java Downloads | Oracle 安装完成后设置环境变量 将环境变量JAVA_HOME设置为 C:\Program Files\Java\jdk1.7.0_25 在系统变量Path中添加 C:\Pro…

部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片

PhotoMaker只需要一张人脸照片就可以生成不同风格的人物照片&#xff0c;可以快速出图&#xff0c;无需额外的LoRA培训。 安装环境 python 3.10gitVisual Studio 2022 安装依赖库 git clone https://github.com/bmaltais/PhotoMaker.git cd PhotoMaker python -m venv venv…

面试笔记系列五之MySql+Mybaits基础知识点整理及常见面试题

myibatis执行过程 1读取MyBatis的配置文件。 mybatis-config.xml为MyBatis的全局配置文件&#xff0c;用于配置数据库连接信息。 2加载映射文件。映射文件即SQL映射文件&#xff0c;该文件中配置了操作数据库的SQL语句&#xff0c;需要在MyBatis配置文件mybatis-config.xml中…

【HDFS】Decommision(退役) EC数据节点剩最后几个块卡住的问题

一、背景 近期操作退役EC集群的节点。在退役的过程中,遇到了一些问题。特此总结一下。 本文描述的问题现象是: 每一批次退役10个节点,完全退役成功后开始操作下一批。 但是,中间有一批次有2台节点的Under Replicated Blocks一直是1,不往下降。 处于Decommissioning状态卡…

React入门之react_jsx入门

简单语法写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script s…

【appium】Hybrid应用自动化|微信小程序自动化

目录 一、Hybrid&#xff08;nativewebview&#xff09;应用自动化 1、webview 2、Hybrid应用自动化实现 2.1准备工作 Step1&#xff1a;准备android 4.4版本以上的手机/模拟器 Step2&#xff1a;在app源码中将webview调试模式打开 Step3&#xff1a;安装UC开发者工具 U…

密码学在 Web3 钱包中的应用:私钥是什么?bitget钱包为例

在非对称加密演算法中&#xff0c;私钥是一串随机生成的数字&#xff0c;通常以十六进制数表示&#xff08;也就是由0、1、2、3、4、5、6、7、8、9、a、b、c、d、e和f组成&#xff09;。私钥生成后&#xff0c;这串数字被作为一个单向数学函数中的输入值&#xff0c;计算产生的…

前端css、js、bootstrap、vue2.x、ajax查漏补缺(1)

学到的总是忘&#xff0c;遇到了就随手过来补一下 1.【JS】innerHTML innerHTML属性允许更改HTML元素的内容可以解析HTML标签 2.【CSS】display: none 设置元素不可见&#xff0c;不占空间&#xff0c;约等于将元素删除一样&#xff0c;只是源代码还存在 3.【CSS】行内样式 4.【…

每日一题——LeetCode1556.千位分隔符

方法一 个人方法&#xff1a; 把n转为字符串&#xff0c;逆序遍历n&#xff0c;把n的每个元素加入res&#xff0c;每三次加入.&#xff0c;最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…

C语言----联合体

不知道大家是否听说过联合体这个名词。但其实大家不用觉得联合体有多特殊&#xff0c;大家可以想象结构体是一栋楼&#xff0c;里面有很多房间&#xff0c;住了形形色色的住户&#xff08;不用或者相同的数据&#xff09;。但联合体只有一个房间&#xff0c;所有的住户都挤在这…

lv21 QT对话框3

1 内置对话框 标准对话框样式 内置对话框基类 QColorDialog, QErrorMessage QFileDialog QFontDialog QInputDialog QMessageBox QProgressDialogQDialog Class帮助文档 示例&#xff1a;各按钮激发对话框实现基类提供的各效果 第一步&#xff1a;实现组件布局&…

通过elementUI学习vue

<template><el-radio v-model"radio" label"1">备选项</el-radio><el-radio v-model"radio" label"2">备选项</el-radio> </template><script>export default {data () {return {radio: 1}…