我有一個Web測試應用程序(基於Selenium,但這不應該太重要),它會連續執行很多測試用例。完成這個過程需要花費幾個小時,測試用例的數量也會增加,所以我想使用多個Web瀏覽器實例並行執行多個測試用例。測試用例彼此沒有依賴關係。重用一個工作者實例來處理幾個任務
非常簡單的,它看起來像這樣:
TestExecutor executor = new TestExecutor(new FirefoxDriver());
for (TestCase test: tests) {
executor.execute(test);
// use results here
}
現在我不知道到底如何並行這一點。我可以輕鬆地創建連接到幾個網絡瀏覽器作爲可調用幾個TestExecutors和使用執行人,CompletitionServices和其他不錯的輔助類,但我怎麼:
通過一項新的TestCase的TestExecutor一旦它準備與以前的TestCase ? Callable中的call()方法不需要任何參數,所以我可能必須在TestExecutor類中實現一些setNextTestCase()來實現這個功能,但我覺得它不是很好。有沒有更好的選擇?
重複使用TestExecutor實例執行下一個測試用例?由於每個TestExecutor實例都需要一個Web瀏覽器實例,因此初始化該實例需要很長時間,並且如果我要爲每個測試用例創建一個新的TestExecutor,則會導致屏幕上出現許多窗口閃爍。
我明白了,謝謝。但在這種情況下,我沒有明白使用ExecutorService的意義。我們從中獲得什麼?在運行期間沒有提交任何新任務(在這種情況下是TestExecutors),因此ExecutorService實際上沒有任何計劃。我可以創建一些TestExecutors(像你所建議的那樣在c'tor中傳入testCaseQueue)作爲Thread實例並啓動它們中的每一個。對? – Pinni
是的,它不是必要的@Pinni。很多人總是使用'ExecutorService'而不是自己實例化'Thread'。 – Gray