根据测试用例的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<String> 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<Vector<String>> contentall,String filepath) throws IOException {
		
		//创建Vector
		Vector<String> content=new Vector<String>();
		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));
			
		}



  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值