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));

}

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

  1. 别踩白块java程序代码_别踩白块源码

    [实例简介] 经典游戏别踩白块源码,自己DIY 嘚瑟一下自己的小伙伴吧 ! [实例截图] [核心代码] OGEngine_bcbkym └── OGEngineDeom_block ├── Andro ...

  2. 我的世界java刷怪数量_我的世界Minecraft源码分析(1):刷怪逻辑

    这个系列通过对我的世界Minecraft源码进行拆分讲解,让大家可以清除的了解一款游戏是怎么一步步被实现出来的,下面就介绍Minecraft源码第一篇内容,关于刷怪逻辑. 生成循环 生物大致划分为四种 ...

  3. c# 比JAVA弱吗? 用c#一份源码同时生成安卓和IOS APP

    Visual Studio 2019调试 安卓和IOS开发的app  上图为C# 同一份源码在红米note 1S 的真机上运行安卓app,和iphone 13 模拟器运行ios版app. (因为ios ...

  4. java压缩源代码_压缩图片大小(Java源码)

    /** * * 直接指定压缩后的宽高: * @param oldFile * 要进行压缩的文件 * @param width * 压缩后的宽度 * @param height * 压缩后的高度 * @ ...

  5. java财务管理源代码_java 个人财务管理系统 入门级源码

    [实例简介]管理日常支出 [实例截图] [核心代码] @RequestMapping(value = "/recordselectBydate") public String se ...

  6. 计算机毕业设计java+ssm理论课_考勤,作业,签到管理系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 本理论课管理系统采用目前最流行的ssm框架和eclipse编辑器.mysql数据库设计并实现的 .主要包括登录模块.课程信息管理模块.考勤信息管理模块.成绩管理模块.和退出模块等多个模块 本 ...

  7. python美女源代码_随机美女写真网页源码+python源程序

    释放双眼,带上耳机,听听看~! 源码介绍 美图网站千千万,美图自己说了算!本源码由@香谢枫林 开发,首页图片做了浏览器窗口自适应,最大化占满PC浏览器和移动浏览器的窗口,并且防止出现滚动条. 功能介绍 ...

  8. delphi7aes加密解密与java互转_跨语言(java vs python vs nodejs)的RSA加解密问题探讨

    多次被问到这样的问题: java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通.... 前端python加密,后端用java ...

  9. java wms erp自动化立体仓库管理系统 进出库 源码 源代码 程序

    java wms erp自动化立体仓库管理系统 进出库 源码 源代码 程序 wms是基于自动化输送线.机械臂.点数机.提升机.堆垛机等自动化设备和现代化仓储精益管理思想开发出来的仓库管理系统. 通过对 ...

最新文章

  1. 【Ansible】3个让Ansible性能飞起的简单优化方案!
  2. QQ截屏 抓级联菜单、下拉菜单及右键弹出菜单图
  3. file_get_contents设置响应时间timeout的方法
  4. linux 两个驱动 竞争,Linux设备驱动第五章(并发和竞争)读书笔记(国外英文资料).doc...
  5. 防盗链技术底层实现原理分析
  6. java 中数组与list_Java中List与数组相互转换实例分析
  7. JDK内置的进制转换
  8. Thinking in Java之匿名内部类
  9. WindowsBuilder安装使用
  10. WinRAR去除广告,亲测可用
  11. vue百度地图加载离线瓦片(包含百度离线文件+瓦片下载器)
  12. IT界最短的笑话:上中台!
  13. Unity shader 空气扭曲效果
  14. Starbound正式版的Mod制作(一)nbsp;…
  15. 常见的系统漏洞安全扫描修复总结归纳
  16. 大比分领先!ACCV 2022 国际细粒度图像分析挑战赛冠军方案
  17. pytorch-多卡GPU训练
  18. revit插件建模助手怎么快速标注轴网距离
  19. php 作业 的背景,新课课程背景下中学语文作业布置的思考(网友来稿)a href=/friend/list.php(教师中心专稿)/a...
  20. HTML5声音引擎Howler.js简介

热门文章

  1. 官宣!多所高校,整体搬迁!
  2. 在密码学研究方面不断创新突破—— 女密码学家的成功密码
  3. 硅谷的高科技公司与“抵消战略”
  4. android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作
  5. 如何将数字转换成口语中的文本串
  6. 做一个“多人在线编辑器”,你会怎么开始
  7. IntelliJ IDEA Maven jar包冲突解决,快速发现jar包冲突
  8. Snowflake核心技术解读系列——架构设计
  9. 蚂蚁金服自研分布式关系数据库OceanBase上线阿里云
  10. 使用DataWorks来调度AnalyticDB任务