2011-07-03 28 views
16

在Selenium-webdriver中創建webdriver實例的最佳做法是什麼?每種測試方法,每個測試類別或每次測試運行一次?每個測試方法的新WebDriver實例?

它們似乎相當(非常)昂貴,但在測試之間保持開放風險會泄漏測試方法之間的信息。

或者是否有其他選擇 - 是單個瀏覽器窗口(不包括彈出窗口)的單個webdriver實例還是有從給定驅動程序實例啓動新窗口/會話的方法?

感謝 馬特

回答

12

我發現在測試方法之間重複使用瀏覽器實例在使用真正的瀏覽器時節省了大量時間, Firefox瀏覽器。使用HtmlUnitDriver運行測試時,幾乎沒有任何好處。

關於不確定測試的危險性,這是完全確定性測試和您的時間之間的折衷。集成測試通常涉及這些權衡。如果你想完全確定性的集成測試,你也應該擔心在測試運行之間清除數據庫/服務器狀態。

如果您要重用瀏覽器實例,您絕對應該做的一件事是清除/存儲運行之間的cookie。

driver.manage().deleteAllCookies(); 

我這樣做,在拆卸()方法。此外,如果您的應用程序在客戶端存儲任何數據,您需要清除該數據(可能通過JavascriptExecutor)。對於正在測試的應用程序,在完成此操作後,它應該看起來像完全不相關的請求,這確實可以最大限度地降低不確定行爲的風險。

5

如果你的自動化集成測試的目標是有重複性測試,那麼我會建議一個新的實例的webdriver爲每個測試執行。

每個測試應獨立,獨立於任何其他測試或副作用。

個人而言,我發現唯一比困難重現錯誤更令人沮喪的事情是您不信任的非確定性測試。

(這變得更加關鍵管理測試數據本身,尤其是當你看到它可以修改持久的應用程序的狀態,就像CRUD操作測試。)

是的,額外的測試執行時間是昂貴的,但它花時間調試你的測試更好。

一些可能的解決方案可以幫助抵消這種損失,將您的測試直接推到構建過程中,超越了持續構建到持續集成的方法。

也嘗試限制集成測試的範圍。如果你有很多沉重的集成測試,吃掉執行時間,嘗試重構。相反,增加對基礎服務調用(業務邏輯所在的地方)的更輕量級單元測試的覆蓋範圍。

+1

我真的不喜歡在每次測試之間啓動新驅動程序所需的額外時間。但是替代方案更糟。我非常努力地讓一個共享驅動程序乾淨地工作,但是我發現自己花費了很多時間來調試測試之間的奇怪交互,而這只是不值得。 –

相關問題