java testng 源代码_根据测试用例的java源码自动生成TestNG的XML文件

1、读取当前项目目录下的所有.java文件,过滤出含有@Test标识的java源文件

2、读取java文件内容,解析出包名、类名、方法名。使用Vector存储,第一个元素为包名,第二个元素为类名,从第三个元素开始存储有@Test标识的方法名

3、当前项目目录下的所有含有@Test标识的.java文件,遍历读取后单个java源文件信息存储到Vector,使用ArrayList存储所有Vector对象。

4、把ArrayList中存储的信息转换成多个XML文件,并保存在指定目录下。

5、生成XML文件的部分源码如下:

//读取Vector中的信息,生成对应的XML文件,存储到项目目录的【/suites】目录下

private void CreateXml(Vector content,String filepath) throws IOException {

//创建Document实例

Document document = DocumentHelper.createDocument();

//记录test名称

String xmltestname=new String();

//记录class名称

String xmlclassname=new String();

//记录要保存的xml文件位置

String xmlfilepath=new String();

//获取test名称

xmltestname=content.get(1).toString();

//获取class名称

xmlclassname=content.get(0).toString()+"."+content.get(1).toString();

//获取文件保存位置

xmlfilepath=filepath+xmltestname+".xml";

//System.out.println(filepath);

//创建根节点suite,并设置name属性为xmlsuitename

Element root = document.addElement( "suite" )

.addAttribute("name", xmltestname);

//创建节点test,并设置name、verbose属性

Element test = root.addElement( "test" )

//记录日志信息的详细程度,有0-10个级别,0是没有,10是最详细,对输出的测试报告无影响

.addAttribute("verbose", "2")

//控制@Test标识的测试用例执行顺序,默认是false,在节点下面的所有方法的执行顺序是无序的

//把它设为true以后就能保证在节点下的方法是按照顺序执行的。

.addAttribute("preserve-order", "true")

.addAttribute("name", xmltestname);

//创建节点classes,无属性

Element classes = test.addElement( "classes" );

//创建节点classs,并设置name属性

Element classs= classes.addElement( "class" )

.addAttribute("name", xmlclassname);

//创建节点methods,无属性

Element methods = classs.addElement( "methods" );

//创建节点classs,并设置name属性

for (int i = 2; i < content.size(); i++){

@SuppressWarnings("unused")

Element include= methods.addElement( "include" )

.addAttribute("name", content.get(i).toString());

}

//设置DocType

//第一个参数:名称

//第二个参数:PUBLIC URI

//第三个参数:SYSTEM URI

document.addDocType("suite", null,"http://testng.org/testng-1.0.dtd");

//输出格式设置

OutputFormat format = OutputFormat.createPrettyPrint();

format = OutputFormat.createCompactFormat();

//设置输出编码

format.setEncoding("UTF-8");

//创建XML文件

XMLWriter writer= new XMLWriter(new OutputStreamWriter(new FileOutputStream(xmlfilepath),format.getEncoding()),format);

writer.write( document );

writer.close();

document=null;

//记录xml文件路径

setxmlpath(xmlfilepath);

}

//读取ArrayList中的信息,批量生成对应的XML文件,存储到项目目录的【/suites】目录下

public void CreateAllXml(ArrayList> contentall,String filepath) throws IOException {

//创建Vector

Vector content=new Vector();

for (int i = 0; i < contentall.size(); i++) {

content=contentall.get(i);

//根据content的信息,生成对应XML文件

CreateXml(content,filepath);

}

}

6、生成XML文件调用执行部分源码

public static void main(String[] args) {

ReadJavaFile readjavafiles=new ReadJavaFile();

WriteTestngXml writexmlfiles=new WriteTestngXml();

String curpath =System.getProperty("user.dir");

try {

writexmlfiles.CreateAllXml(readjavafiles.ReadContentAll(curpath),curpath+"\\suites\\") ;

} catch (IOException e) {

System.out.println("生成XML文件失败");

}

System.out.println("生成的XML文件如下:");

for (int i = 0; i < writexmlfiles.getxmlpath().size(); i++) {

System.out.println(writexmlfiles.getxmlpath().get(i));

}

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

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

相关文章

光进铜退下的“更高”与“更低”,锐捷发布企业极简以太全光网解决方案

全新一代企业网络建设中&#xff0c;以太全光网将满足高带宽、简运维、降成本的要求。 头图 | 付费下载于视觉中国 出品 | CSDN云计算 近日&#xff0c;锐捷网络正式对外发布企业极简以太全光网解决方案。方案针对仓储物流、电子信息、工业制造、地产酒店等在行业客户在园区网…

物联网海量时序数据存储有哪些挑战?

简介&#xff1a; 随着 IoT 技术的快速发展&#xff0c;物联网设备产生的数据呈爆炸式增长&#xff0c;数据的总量&#xff08;Volume&#xff09;、数据类型越来越多&#xff08;Variety&#xff09;、访问速度要求越来越快&#xff08;Velocity&#xff09;、对数据价值&…

什么是 RedCap?一文详解!

作者 | 小枣君来源 | 鲜枣课堂随着3GPP R17版本的不断推进&#xff0c;一个新的名词逐渐开始热门起来&#xff0c;那就是RedCap。究竟什么是RedCap&#xff1f;为什么要引入它&#xff1f;它和现在的5G有什么区别&#xff1f;且看本文的深入解析……█ 什么是RedCapRedCap&…

被解救的代码 - 代码即服务时代来了!

简介&#xff1a; 人类对自由的追求从未停止&#xff0c;我们用战斗获得民族自由&#xff0c;我们用代码获得双手自由&#xff0c;同时代码作为服务器的奴隶&#xff0c;也开始蠢蠢欲动&#xff0c;革命已经开始&#xff0c;当代码翻身做主&#xff0c;作为开发者的我们又该如何…

java timer schedule_java怎么再次设置Timer的schedule???

public class TestTimer {class MyTimerTask extends TimerTask {private int time; //定时执行时间public MyTimerTask(){}public MyTimerTask(int _time){this.time _time;}Overridepublic void run() {System.out.println("time:" time);System.out.println((ti…

配置审计(Config)配合开启OSS防盗链功能

简介&#xff1a; 本文作者&#xff1a;紫极zj 本文将主要介绍利用【配置审计】功能&#xff0c;如何快速发现企业上云过程中&#xff0c;针对未配置防盗链的 OSS Bucket 定位及修复案例。 前言 配置审计&#xff08;Config&#xff09;将您分散在各地域的资源整合为全局资源…

python乘法函数_Python中列表与元组的乘法操作示例

本文实例讲述了Python中列表与元组的乘法操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;直接上code吧&#xff0c;还可以这么玩儿列表乘法&#xff1a;li[1,]lili*3print(li)out:[1, 1, 1]元组乘法&#xff1a;>>> t(1,2)>>> t*3(1, 2, 1, 2, …

清华大学:2021元宇宙研究报告

关于元宇宙的详细介绍&#xff1b;来源&#xff1a;软件定义世界&#xff08;SDX&#xff09;往期推荐阿里云投入 20 亿发力操作系统谷歌自研Tensor芯片&#xff0c;8核CPU&#xff0c;20核GPURedis很厉害&#xff0c;使用规范来啦Facebook 改名Meta&#xff0c;是押注元宇宙还…

如何做规划?分享2种思维和4个方法

简介&#xff1a; 规划不只是高层的事。学会做规划&#xff0c;不仅可以让目标更聚焦&#xff0c;还能让我们清晰地知道今后要做什么、如何去做。在本篇文章中&#xff0c;提到了规划的2种思维模式&#xff0c;和作者自己在规划中用到的4个规划方法&#xff0c;希望让开始做规划…

vue如何在末尾添加_怎样在Linux上开发vue项目

一、开发环境搭建&#xff1a;安装node.js环境以及vue cli工具(1)安装node.js从官网下载对应的二进制压缩包&#xff0c;如下图&#xff1a;01.png解压到程序安装目录xz -d node-v12.17.0-linux-x64.tar.xztar -xvf node-v12.17.0-linux-x64.tarsudo mv node-v12.17.0-linux-x6…

计算机专业考哪些证书含金量高?

计算机专业要不要考证&#xff1f;考证很重要吗&#xff1f;考哪个好&#xff1f;对于有些人而言&#xff0c;他们可能会有人认为认证就是一张纸&#xff0c;没有太大的用处&#xff0c;看到大家都在考&#xff0c;心里又会产生动摇&#xff1b;还有人会认为考证的价格太高&…

java 判断日期连续_如何在Java中检查日期是否大于另一个日期?[重复]

小编典典从这里拍摄&#xff1a;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateDiff {public static void main( String[] args ){compareDates("2017-01-13 00:00:00", "2017-01-14 00:00:00&qu…

【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美

简介&#xff1a; 台湾作家林清玄在接受记者采访的时候&#xff0c;如此评价自己 30 多年写作生涯&#xff1a;“第一个十年我才华横溢&#xff0c;‘贼光闪现’&#xff0c;令周边黯然失色&#xff1b;第二个十年&#xff0c;我终于‘宝光现形’&#xff0c;不再去抢风头&…

云原生时代,开发者如何构筑容器安全?

随着数字化转型进入“深水区”&#xff0c;云原生改变传统的开发模式&#xff0c;加快程序应用的开发、交付、运维效率&#xff0c;充分释放云价值。容器作为云原生的代表技术&#xff0c;正成为资源调度和编排的标准&#xff0c;有效帮助企业降低 IT 实施和运维成本。 据 CNC…

python依赖注入_如何做依赖注入python方式?

这一切都取决于情况.例如,如果您使用依赖注入来进行测试,所以您可以轻松地嘲笑某些内容 – 您可以经常放弃注入&#xff1a;您可以嘲笑您将注入的模块或类&#xff1a;subprocess.Popen some_mock_Popenresult subprocess.call(...)assert some_mock_popen.result resultsub…

java外部接口图解_java代码实现访问网络外部接口并获取数据的工具类详解

java代码实现访问网络外部接口并获取数据的工具类工具类代码&#xff0c;可以直接copy使用package com.yqzj.util;import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.i…

「技术人生」第2篇:学会分析事物的本质

简介&#xff1a; 对于研发同学而言&#xff0c;探究事物的本质&#xff0c;是最基础最核心最先需要被掌握的技能&#xff0c;没有之一。 作者&#xff1a;贺科学 技术一号位不是岗位&#xff0c;更多的是技术人员在公司中做事的一种心态&#xff0c;这个系列的文章适合所有想…

低代码能做什么?这家服务商用钉钉宜搭打造了智慧医院管理应用

简介&#xff1a; 谷瞰在医疗信息化领域积累的专业解决方案&#xff0c;如果能加持宜搭轻量级、高度灵活、极高效的开发支撑能力&#xff0c;可能是找到智慧医院快速落地的最优解。 “疫情作为催化剂&#xff0c;加速了医疗信息化的发展”&#xff0c;浙江谷瞰信息有限公司董事…

python socket能做什么_[python]初探socket

1.什么是socket&#xff1f;Socket中文译作&#xff1a;套接字&#xff0c;但是大家一般约定俗称的都用&#xff1a;socket。我想在解释socket是什么之前&#xff0c;先说它是用来干嘛的&#xff1a;socket是来建立‘通信’的基础&#xff0c;建立连接&#xff0c;传输数据——…

mysql sysdate本周_oracle 、mysql 取昨天 前天 本周 数据

查询今天数据&#xff1a;SELECT COUNT(1) FROM T_CALL_RECORDS WHERE TO_CHAR(T_RKSJ,‘YYYY-MM-DD‘)TO_CHAR(SYSDATE,‘YYYY-MM-DD‘)查询昨天数据&#xff1a;SELECT COUNT(1) FROM T_CALL_RECORDS WHERE TO_CHAR(T_RKSJ,‘YYYY-MM-DD‘)TO_CHAR(SYSDATE-1,‘YYYY-MM-DD‘)…