2009-08-12 85 views
2

問候,自動啓動硒RC在Windows XP

我已經完成了開發一套使用Selenium RC和Java測試,我想他們構建系統集成,所以我可以通宵運行測試。該工藝運行是這樣的:

  1. Cruisecontrol可以做一個完整的構建
  2. CruiseControl的服務器上的cron作業安裝了一個特定的測試集羣上生成。
  3. 構建安裝完成後,網頁將隨安裝結果(通過/失敗)一起更新。
  4. 在客戶機(Windows XP)上運行的應用程序(trigger.jar)將監視網頁。當它檢測到安裝成功時,它將啓動Selenium測試:java -jar overnightTests.jar
  5. 觸發器應用程序不需要執行任何日誌記錄或捕獲測試套件的退出代碼。所有這些東西都由測試套件處理。

我已經寫了所有的作品,但觸發器給我帶來麻煩。

這裏是我的代碼:

try { 
    String cmd = "java"; 
    String jArg = "-jar"; 
    String program = "overnightTests.jar"; 
    String aptUrl = "https://apt.qa6.spockmate.com/apt/" ; 
    String campaignManagerURL = "http://app01.dev02.sn.spockmate.com:8080/cm/" ; 
    String contractDatafile = "C:\\testdata\\MasterDataForSelenium.xls" ; 
    String adMapDataDir = "C:\\testdata\\AdMaps\\" ; 
    String creativeAssetsFile = "C:\\testdata\\CreativeAssets\\CreativeAssetsForSeleniumTests.csv"; 
    String adminURL = "https://admin.qa6.spockmate.com/admin/"; 

    String [] commands = new String[]{cmd, jArg, program, aptUrl, campaignManagerURL, contractDatafile, adMapDataDir, creativeAssetsFile, adminURL}; 

    Process child = Runtime.getRuntime().exec(commands); 

} catch (IOException e) { 
    System.out.println("Exception thrown while calling Runtime:"); 
    System.out.println(e.getCause()); 
    e.printStackTrace(); 
} 

當行 「調用Runtime.getRuntime()EXEC(命令)。」 執行時,trigger.jar掛起。無論我是從DOS命令行還是從Eclipse運行應用程序都無關緊要。這是一個奇怪的部分:一旦我殺死了trigger.jar應用程序(通過ctrl-c或Eclipse的停止按鈕),我試圖觸發的overnightTests.jar應用程序將啓動。每次運行應用程序時都會發生這種情況。就好像不是啓動了overnight_tests.jar,而是將該工具放置在隊列中,以啓動「下一個」。我試着分配'Runtime.getRuntime()。exec(命令);'到一個Process變量並在Process上做一個wait(),我試着完全忽略了這個返回值。結果總是一樣的。

我的問題是:

  1. 什麼是我的代碼丟失,將允許它推出overnightTests.jar在一個單獨的進程,並忘掉它,使硒熄滅得意揚揚地和做它的事?
  2. 對於以前遇到過這個問題的人來說,有沒有一種更簡單,更清潔,更精細的解決方案?我對觸發信號的格式以及它是如何發送和接收有很大的控制權,而且我的主要要求是解決方案很健壯。任何有效的,不是過於複雜或複雜的都值得一試。

任何幫助或建議都會讓我非常高興,並使我更有可能完成這個項目並在本月底度假。

回答

1

一對夫婦的建議:

  • 使用Ant如果可以的話,我已經找到了調用Java進程很可靠,你有過像「重生」和「叉」控制(搜索「 ant java任務「瞭解更多詳情)。你可以在這裏找到一個例子,看看「jmeter-cycle-heapdump」目標(第159行),還可以看看Ant「parallel」/「sequential」元素的用法,我想這會給你一些關於測試自動化,你正在嘗試:) - http://code.google.com/p/perfbench/source/browse/trunk/perfbench/build.xml
  • 我會嘗試把所有這些命令放到一個正常的批處理文件,並嘗試和調用,不知何故,可能會更簡單,你不需要擔心一個java進程調用另一個java進程,這似乎是問題
1

我不相信你的安裝完成後觸發一個Selenium測試套件的設置?

不在CruiseControl中創建另一個項目的原因是什麼? 假設您的核心項目是XXX,那麼我會添加XXX_nightly測試。

此外,通過一些智能<veto>,只有在核心項目處於正確狀態時,才能觸發夜間測試。這種設置將允許您在工作時間內手動強制進行「夜間」測試。