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

 

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


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

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


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


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


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

[java]  view plain  copy
  1. //读取Vector中的信息,生成对应的XML文件,存储到项目目录的【/suites】目录下  
  2.     private void  CreateXml(Vector<String> content,String filepath) throws IOException {  
  3.           
  4.         //创建Document实例  
  5.         Document document = DocumentHelper.createDocument();  
  6.           
  7.         //记录test名称  
  8.         String xmltestname=new String();  
  9.   
  10.         //记录class名称  
  11.         String xmlclassname=new String();  
  12.           
  13.         //记录要保存的xml文件位置  
  14.         String xmlfilepath=new String();  
  15.   
  16.           
  17.         //获取test名称  
  18.         xmltestname=content.get(1).toString();  
  19.           
  20.         //获取class名称  
  21.         xmlclassname=content.get(0).toString()+"."+content.get(1).toString();  
  22.           
  23.         //获取文件保存位置  
  24.         xmlfilepath=filepath+xmltestname+".xml";  
  25.         //System.out.println(filepath);  
  26.           
  27.         //创建根节点suite,并设置name属性为xmlsuitename  
  28.         Element root = document.addElement( "suite" )  
  29.                 .addAttribute("name", xmltestname);  
  30.           
  31.         //创建节点test,并设置name、verbose属性  
  32.         Element test = root.addElement( "test" )  
  33.                   
  34.                 //记录日志信息的详细程度,有0-10个级别,0是没有,10是最详细,对输出的测试报告无影响  
  35.                 .addAttribute("verbose""2")  
  36.                   
  37.                 //控制@Test标识的测试用例执行顺序,默认是false,在节点下面的所有方法的执行顺序是无序的  
  38.                 //把它设为true以后就能保证在节点下的方法是按照顺序执行的。  
  39.                 .addAttribute("preserve-order""true")  
  40.                 .addAttribute("name", xmltestname);  
  41.           
  42.         //创建节点classes,无属性  
  43.         Element classes = test.addElement( "classes" );  
  44.                   
  45.         //创建节点classs,并设置name属性  
  46.         Element classs= classes.addElement( "class" )  
  47.                 .addAttribute("name", xmlclassname);  
  48.         //创建节点methods,无属性  
  49.         Element methods = classs.addElement( "methods" );  
  50.                   
  51.         //创建节点classs,并设置name属性  
  52.         for (int i = 2; i < content.size(); i++){  
  53.             @SuppressWarnings("unused")  
  54.             Element include= methods.addElement( "include" )  
  55.                     .addAttribute("name", content.get(i).toString());  
  56.         }     
  57.           
  58.             //设置DocType  
  59.             //第一个参数:名称    
  60.             //第二个参数:PUBLIC URI  
  61.             //第三个参数:SYSTEM URI  
  62.             document.addDocType("suite"null,"http://testng.org/testng-1.0.dtd");  
  63.              
  64.             //输出格式设置  
  65.             OutputFormat format = OutputFormat.createPrettyPrint();   
  66.             format = OutputFormat.createCompactFormat();  
  67.               
  68.             //设置输出编码  
  69.             format.setEncoding("UTF-8");  
  70.               
  71.               
  72.             //创建XML文件  
  73.             XMLWriter writer= new XMLWriter(new OutputStreamWriter(new FileOutputStream(xmlfilepath),format.getEncoding()),format);   
  74.             writer.write( document );   
  75.             writer.close();  
  76.             document=null;  
  77.               
  78.             //记录xml文件路径  
  79.             setxmlpath(xmlfilepath);  
  80.     }  
  81.   
  82.     //读取ArrayList中的信息,批量生成对应的XML文件,存储到项目目录的【/suites】目录下  
  83.     public void CreateAllXml(ArrayList<Vector<String>> contentall,String filepath) throws IOException {  
  84.           
  85.         //创建Vector  
  86.         Vector<String> content=new Vector<String>();  
  87.         for (int i = 0; i < contentall.size(); i++) {  
  88.             content=contentall.get(i);  
  89.             //根据content的信息,生成对应XML文件  
  90.             CreateXml(content,filepath);  
  91.         }  
  92.           
  93.           
  94.           
  95.     }  

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

[java]  view plain  copy
  1. public static void main(String[] args) {  
  2.           
  3.         ReadJavaFile readjavafiles=new ReadJavaFile();  
  4.         WriteTestngXml writexmlfiles=new WriteTestngXml();  
  5.           
  6.         String curpath =System.getProperty("user.dir");  
  7.           
  8.         try {  
  9.             writexmlfiles.CreateAllXml(readjavafiles.ReadContentAll(curpath),curpath+"\\suites\\") ;  
  10.         } catch (IOException e) {  
  11.             System.out.println("生成XML文件失败");  
  12.         }  
  13.           
  14.         System.out.println("生成的XML文件如下:");  
  15.         for (int i = 0; i < writexmlfiles.getxmlpath().size(); i++) {  
  16.             System.out.println(writexmlfiles.getxmlpath().get(i));  
  17.               
  18.         }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值