2012-10-09 59 views
37

我想更好地瞭解測試框架並一直在研究硒。我之前使用過HTMLUnit,主要是當我需要從網站或類似網站上刮取一些信息時。Selenium v​​s HtmlUnit?

在編寫測試自動化的背景下,Selenium v​​s HTMLUnit有哪些優缺點?在我看來Selenium比HTMLUnit的設置更復雜,但同時還有一個Selenium的HTMLUnitDriver,我認爲它的行爲方式與HTMLUnit本身的方式完全相同?顯然,Selenium提供了更穩健的框架,它具有用於Pararel測試的Selenium RC,它也有不同的瀏覽器驅動程序可以使用 - 儘管當您使用瀏覽器驅動程序時,測試實際上會打開/關閉瀏覽器應用程序,而不是比無頭。

可能是我不正確理解硒。一些方向和指針會很棒!我還看到在移動瀏覽器上進行自動化測試,我發現Selenium有一個IPhoneDriver,但這不是一個無頭測試,因爲它需要實際的iOS模擬器。

無論如何要在移動網站上進行無頭測試嗎?改變用戶代理是否足夠?我已經看到了一些關於改變用戶代理的帖子,這些代碼似乎有自己的挑戰,例如。 Set user-agent in Selenium RC

非常感謝!

+1

你有沒有想過使用PhantomJS或「無頭鍍鉻」,而不是? – djangofan

回答

62

好吧,會試圖解釋細節上的差異。

說到並行測試,最好使用硒網格。 硒RC和硒網格的基本概念。 traditional selenium setup selenium grid setup selenium grid:Requesting a Specific Environment 你可以得到更多的細節here

硒的webdriver有些話:

硒2.0的主要新特性是webdriver的API的整合。 WebDriver旨在提供更簡單,更簡潔的編程界面,同時解決Selenium-RC API中的一些限制。開發Selenium-WebDriver是爲了更好地支持動態網頁,頁面的元素可能會改變,頁面本身不會被重新加載。 WebDriver的目標是提供一個設計良好的面向對象API,爲現代先進的Web應用程序測試問題提供改進的支持。

與Selenium-RC相比,WebDriver如何「驅動」瀏覽器?

Selenium-WebDriver使用每個瀏覽器對自動化的本機支持直接調用瀏覽器。如何進行這些直接調用,它們支持的功能取決於您使用的瀏覽器。有關每個「瀏覽器驅動程序」的信息將在本章後面提供。 對於那些熟悉Selenium-RC的人來說,這與你習慣的很不一樣。 Selenium-RC對每個支持的瀏覽器都採用相同的方式工作。當瀏覽器加載後,它將JavaScript功能「注入」到瀏覽器中,然後使用其javascript在瀏覽器中驅動AUT。 WebDriver不使用這種技術。同樣,它使用內置的瀏覽器支持自動化,直接驅動瀏覽器。

的webdriver和硒服務器

你可以或不可以,需要Selenium服務器,這取決於你打算如何使用硒的webdriver。如果您只使用WebDriver API,則不需要Selenium-Server。如果你的瀏覽器和測試都在同一臺機器上運行,並且你的測試只使用WebDriver API,那麼你不需要運行Selenium-Server; WebDriver將直接運行瀏覽器。 儘管Selenium-Server和Selenium-WebDriver一起使用有一些原因。

  • 您正在使用硒網格通過多個分發你的測試 機或虛擬機(VM)。
  • 您想要連接到具有特定瀏覽器 版本但不在當前計算機上的遠程機器。
  • 您沒有使用Java綁定(即Python和C#或Ruby)和 想可以使用HtmlUnit驅動

硒的webdriver的驅動程序 webdriver的是對關鍵接口的名稱應該編寫哪些測試,但有幾種實現。這些措施包括:

驅動的HtmlUnit 這是目前最快,最輕量級實現的webdriver的。顧名思義,這是基於HtmlUnit。 HtmlUnit是沒有GUI的WebBrowser的基於Java的實現。對於任何語言綁定(除java以外),Selenium Server都需要使用此驅動程序。

優點

  • 最快落實的webdriver
  • 一個純Java的解決方案,所以它是平臺無關的。
  • 支持JavaScript

缺點

  • C仿真其他瀏覽器的JavaScript的行爲(見下文)

的JavaScript在主流瀏覽器化的HtmlUnit驅動 無使用JavaScript引擎由HtmlUnit(Rhino)使用。如果使用HtmlUnit測試JavaScript,結果可能會與這些瀏覽器顯着不同。 當我們說「JavaScript」時,我們實際上是指「JavaScript和DOM」。雖然DOM是由W3C定義的,但每個瀏覽器都有自己的怪癖和它們在實現DOM方面的差異,以及JavaScript如何與它進行交互。 HtmlUnit擁有令人印象深刻的DOM完整實現,並且對使用JavaScript有很好的支持,但它與其他任何瀏覽器沒有什麼不同:它與W3C標準和主要瀏覽器的DOM實現都有其自身的差異和差異,儘管它模仿其他瀏覽器的能力。使用WebDriver,我們不得不做出選擇;我們是否啓用了HtmlUnit的JavaScript功能,並且冒着團隊陷入只存在於問題中的風險,還是因爲知道有越來越多的依賴JavaScript的網站而使JavaScript停用?我們採取了保守的方法,並且默認情況下在使用HtmlUnit時禁用了支持。每次發佈WebDriver和HtmlUnit,我們都會重新評估這個決定:我們希望在某個時候在HtmlUnit上默認啓用JavaScript。

探討更深入的webdriver的設置看this

HtmlUnit documentation是的HtmlUnit沒有一個通用的單元測試框架。它專門用於模擬瀏覽器以進行測試,並且旨在用於其他測試框架(如JUnit或TestNG)中。

所以締結硒的HtmlUnit區別的HtmlUnit是一個基於java實現web瀏覽器的無GUI模擬用於測試的瀏覽器的方式硒的webdriver使直接調用瀏覽器使用每個瀏覽器對自動化的本地支持。我們可以看到HtmlUnit提供的API沒有GUI自動化的可能性,而WebDriver提供了內部瀏覽器自動化的可能性。

談到移動自動化, 硒也有一個iPhone司機 iPhone Driver wiki article 和Android驅動程序 Android Driver wiki article

參見this presentation

不幸的是我不能給你我的手機驅動程序的工作經驗評估,因爲我處理網絡自動化(無手機)。也知道Cucumber(自動化工具)在移動自動裝置中很受歡迎。 參見thisthis

希望它現在來更清晰律位爲你=)

+0

非常感謝解釋! ...因此,特定於瀏覽器的驅動程序(而不是HTMLUnitDriver)更好,因爲它們會測試瀏覽器的行爲方式 - 但這需要瀏覽器在屏幕上彈出和彈出的代價(在運行測試時只是小小的煩惱本地你看到這個瀏覽器應用程序自己彈出和彈出) - 沒有辦法避免實際的瀏覽器加載(除了使用HTMLUnitDriver)? –

+0

有一個。如果你覺得它很煩人,你可以得到遠程機器(VM)並獲得例如硒測試運行在遠程機器上。要分享我在當前項目中使用的方法:在hudson -jenkins上添加新任務以運行日常構建中的測試集,並獲得測試狀態的電子郵件通知。 我們不應該忘記自動化測試集的基本目標:無論使用何種驅動程序,我們都應該完全確信應用程序的功能是穩定的,並且即將發佈。細節(HTMLUnitDriver或其他選擇)取決於需求和其他依賴關係。 –

+0

幾年前,我使用JavaService工具將Selenium RC作爲Windows服務安裝,這樣我就可以在無需登錄到計算機的情況下將它作爲無頭過程無人值守運行。 Jenkins將通過ANT exec任務啓動Windows服務,並在測試套件完成後,另一個ANT任務將停止服務。我跟着這個http://bit.ly/pWS7yR創建了一個自定義的bat文件來執行服務安裝,例如http://pastebin.com/zvivguaP –

2

Selenium和HTMLUnit在概念上有些相似,但Selenium更加成熟/強大,並且具有更多功能。

請注意,Selenium包含Firefox的錄製(IDE)插件,它允許您記錄測試以及本質上驅動瀏覽器的RC/WebDriver自動化框架。這兩個可以一起使用,使測試創建非常容易。

我可以看到使用HTMLUnit的唯一好處是它的資源密集度較低,因此您可以在較少的硬件上運行測試,但是Selenium的並行支持甚至不再是真的。

1

當從運行測試詹金斯一夜,你通常需要一個窗口系統,如X11或Windows中運行Web進不去瀏覽器。因此,在這種情況下,我看到使用HTMLUnit Web驅動程序的好處,因爲它不需要訪問窗口系統。

+0

你可以使用Xvbf在Jenkins上運行任何gui瀏覽器 –