改進 Rational Functional Tester 啟動應用程序的過程(2)

發表于:2011-12-08來源:未知作者:領測軟件測試網采編點擊數: 標簽:rational
當開始回放腳本時,RFT 將首先啟動應用程序,然后再進行自動化測試。由此可以得知 startApp 是 RFT 用于啟動應用程序的函數,它會根據獲得的參數去配置

  當開始回放腳本時,RFT 將首先啟動應用程序,然后再進行自動化測試。由此可以得知 startApp 是 RFT 用于啟動應用程序的函數,它會根據獲得的參數去配置文件 configurations.rftcfg 中映射詳細的配置信息,如可執行文件、路徑、類型等,這些信息將真正決定應用程序如何啟動。

  對于前文描述的 Lotus Connections 2.0 安裝文件的配置,startApp 會根據名稱 install 去匹配并獲取詳細的信息,從而啟動該程序,在 configurations.rftcfg 可以找到對應的代碼。如清單 2 。

  清單 2. RFT 生成的配置文件代碼

 

<Application L=".Application"> 
	 <Name>install</Name> 
	 <Kind>executable</Kind> 
	 <Path>C:\Build\LC2.0_20080427</Path> 
	 <Command>dbWizard_RFT.bat</Command> 
	 <Jvm/> 
	 <Classpath></Classpath> 
 <Args></Args> 
	 <WorkingDir>C:\Build\LC2.0_20080427</WorkingDir> 
 </Application>

  configurations.rftcfg 文件通常存放在本地硬盤上的 C :\Documents and Settings\All Users\Application Data\IBM\RFT\configuration 目目錄下。

  實際應用中的問題

  在實際應用中,一個軟件產品在 beta 版或者 release 版發布前,會根據項目進展推出一個個 build,這些 build 經常是每日構建,構建好后放在按一定規則命名的(如日期)的文件內,然后統一存放在 build 服務器上,留待測試團隊下載測試。本文的測試對象 Lotus Connections 2.0 安裝程序正是如此。

  針對實際情況,在搞清楚了 RFT 如何配置和啟動應用程序之后,我們會發現一些不便之處。

  在分工精細的項目團隊里,開發腳本的人員和使用腳本的人往往不是一個人,讓使用腳本的人經常打開 RFT 去配置容易出錯。

  腳本開發好后,每次為了測試新的 build 都要打開 RFT 重新配置信息,顯得比較煩瑣。

  同時,RFT 支支持命令行方式運行腳本。其中 -datastore 后面指定工程路徑,-playback 后面指定腳本的全名稱。如清單 3 。

  清單 3. RFT 命令行腳本

 

 "C:\Program Files\IBM\SDP70\jdk\bin\java" -classpath 
 "C:\Program Files\IBM\SDP70\FunctionalTester\bin\rational_ft.jar"
     com.rational.test.ft.rational_ft

  -datastore "C:\ workspace\Project1" -playback testcases.install.Script1

  使用命令行方式不僅擺脫了要打開 RFT 界面運行腳本的限制,而且也可以讓用戶輕易的實現自動化測試,如在 Unix 環境下使用 cron,在 Windows 下使用“任務計劃”來自動調用測試腳本。

  如此,又出現了一個新的問題:

  當用戶希望用命令行方式啟動腳本測試每個 build,然后進一步實現自動化測試時,由于 build 的信息改變,就不得不打開 RFT 界面重新配置 build 信信息。造成了自動化測試的實現上的困難。

  一種改進的啟動應用程序方式

  針對實際應用中的問題,我們提出了一種改進的啟動應用程序的方式,即擴展 RFT 的 startApp 函數,用代碼讀取配置文件獲得 build 信信息,然后進行啟動。以圖擺脫 RFT 本身的配置步驟。

  由此,我們可以寫出自定義的啟動函數。如清單 4 。

  清單 4. 自定義啟動函數

 

// 啟動應用程序
 public static boolean execApp(String appName) { 
	
	 try { 
 appName = appName.replace("\\", "/"); 
		 String directory = appName.substring(0, appName.lastIndexOf("/")); 
		 String[] command = {appName}; 
		 String workDir = directory; 
		 String outputPath = directory; 
		 int status = -1 ; 
		
		 if (!"Linux".equals(System.getProperty("os.name"))) { 
 // Windows 平臺啟動應用程序
			 status = runCommand(command, workDir, null, outputPath); 
		 } else { 
 // Linux 平臺啟動應用程序
			 String auth = "chmod +x " + appName; 
             status = runCommand(new String[] { auth }, null, null,outputPath);
             status = runCommand(command, workDir, null, outputPath); 
		 } 
		
		 if(status == 0){ 
			 return true; 
		 }else{ 
			 return false; 
		 } 
	 } catch (Exception e){ 
		 e.printStackTrace(); 
		 return false; 
	 } 
 } 

 // 執執行命令
 public static int runCommand(String[] command, String workDir, 
 Map environment, String outputPath) { 
	
	 ProcessBuilder builder = new ProcessBuilder(command); 
	 builder.redirectErrorStream(true); 
	 Process process = null; 
	 int status = -1; 
	
	 if (workDir != null) 
		 builder.directory(new File(workDir)); 
	
	 if (environment != null) 
		 builder.environment().putAll(environment); 
	
	 try { 
		 process = builder.start(); 
	 } catch (Exception e) { 
		 e.printStackTrace(); 
	 } 
	
	 if (process != null) { 
		 try { 				
			 status = process.waitFor(); 
		 } catch (Exception e) { 
			 e.printStackTrace(); 
		 } 
	 } 
	 return status; 
 }

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97