我已經完成了開發一套使用Selenium RC和Java測試,我想他們構建系統集成,所以我可以通宵運行測試。該工藝運行是這樣的:
- Cruisecontrol可以做一個完整的構建
- CruiseControl的服務器上的cron作業安裝了一個特定的測試集羣上生成。
- 構建安裝完成後,網頁將隨安裝結果(通過/失敗)一起更新。
- 在客戶機(Windows XP)上運行的應用程序(trigger.jar)將監視網頁。當它檢測到安裝成功時,它將啓動Selenium測試:
java -jar overnightTests.jar
。 - 觸發器應用程序不需要執行任何日誌記錄或捕獲測試套件的退出代碼。所有這些東西都由測試套件處理。
我已經寫了所有的作品,但觸發器給我帶來麻煩。
這裏是我的代碼:
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(),我試着完全忽略了這個返回值。結果總是一樣的。
我的問題是:
- 什麼是我的代碼丟失,將允許它推出overnightTests.jar在一個單獨的進程,並忘掉它,使硒熄滅得意揚揚地和做它的事?
- 對於以前遇到過這個問題的人來說,有沒有一種更簡單,更清潔,更精細的解決方案?我對觸發信號的格式以及它是如何發送和接收有很大的控制權,而且我的主要要求是解決方案很健壯。任何有效的,不是過於複雜或複雜的都值得一試。
任何幫助或建議都會讓我非常高興,並使我更有可能完成這個項目並在本月底度假。