根據測試用例的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));
			
		}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章