什么是無頭測試?
首先我們來看看什么是“瀏覽器”? 看起來像這樣子
Headless測試是在不顯示瀏覽器UI的情況下運行基于UI的瀏覽器測試。它在瀏覽器上運行測試或運行腳本,但瀏覽器沒有進行UI部分的啟動。
為什么要使用無頭瀏覽器?
采用這種方法有很多優點和缺點。使用無頭瀏覽器可能對瀏覽網頁沒有太大幫助,但對于自動化任務和測試來說,它是非常棒的。
為什么要關心無頭瀏覽器的測試?
向錢看是老生常談話題,但它卻是一個我們測試發展中關鍵指標,為什么是真正的趨勢,什么是我應該關注的。例如,Sauce Labs剛剛推出了一項名為Sauce Headless的新服務,這是一個基于云的Headless測試解決方案。
我知道sauce lab的人都很聰明。他們不會開發任何多余的東西,除非他們從用戶那里得到反饋,說這是需要的功能。
我相信他們不會是唯一一個專注于無頭測試的人。
隨著我們在軟件開發生命周期中越來越多的左移,我們需要越來越快地向開發人員提供反饋。一種方法是利用無頭瀏覽器進行快速檢查。
軟件生產中的自動化
如果你了解我,你也會知道我是一個非常推崇自動化的人。
對我來說,自動化不僅僅只是自動化測試。
它是任何您可以自動化的東西,來節省人們在軟件交付生命周期的任何部分的時間或精力---無論是開發、質量、測試、DevOps還是安裝軟件;我將其中任何一個過程都稱為自動化。無頭瀏覽器實際上也可以用于很多向這樣的工作。
無頭瀏覽器比真正的瀏覽器更快
無頭瀏覽器的一個明顯的“優勢”是它們通常比真正的瀏覽器更快;
原因在于您沒有啟動瀏覽器GUI,所以您可以繞過真正的瀏覽器加載CSS、JavaScript、打開和呈現HTML所花費的所有時間。
但我必須承認,這并不完全像白天黑夜簡潔明了。但使用無頭瀏覽器時,您通常會看到性能提高了2倍至15倍。
因此,如果性能對您至關重要,那么無頭瀏覽器可能是一個不錯的選擇。
利用無頭瀏覽器爬網站數據
無頭瀏覽器的另一個優點是,它們可以用來抓取網站。但是,要做到這一點,您不必手動啟動一個網站。你可以不加思索地利用它,只抓取部分HTML。你不需要渲染一個完整的瀏覽器。
例如,你的工作需要研究統計一些體育數據,或比較不同網站之間的價格。
因為它只是您正在尋找的數據,所以沒有必要啟動一個完整的瀏覽器實例;這只是額外的開銷-----有時候開銷越少,返回結果的速度就越快。
它不一定是一個測試,這沒關系。同樣,您希望利用正確的工具來做正確的事情。
我還認為許多測試人員沒有使用無頭瀏覽器抓取-----這很遺憾。
因此,如果您想做一些網站抓取來幫助您進行測試,您將不需要啟動一個成熟的瀏覽器;您可以使用無頭瀏覽器來為您獲得該功能。
節省開發人員的時間
我知道很多開發人員使用無頭瀏覽器對他們的網站和移動應用程序的代碼更改進行單元測試。在不需要手動刷新或啟動瀏覽器的情況下,通過命令行就可以完成所有這些操作,從而節省了大量工作。例如,《PhantomJS烹飪書》的作者Rob Friesel在一次testtalk采訪中解釋了他的開發人員是如何使用PhantomJS無頭瀏覽器的:
“雖然PhantomJs本身并不是一個測試框架,但它確實是煤礦里的一只很好的金絲雀,可以給你一些信心;如果你的測試通過了,你就可以對你的代碼很有信心。”
使用無頭瀏覽器腳本監視性能
另一個常見的用法是使用無頭瀏覽器腳本監視網絡應用程序的性能。
有些人甚至使用它來自動渲染和屏幕捕捉他們的網站圖像,利用自動化方式來執行布局檢查。
我想這就是為什么google還開發了一個名為Puppeteer的新的無頭Chrome API,用于處理許多開發人員的用例。
無頭瀏覽器測試的想法
除了我們已經討論過的,下面是我遇到的一些無頭瀏覽器的其他用途:
- 在沒有界面的機器上運行測試
- 設置數據
- 測試SSL
- 在一臺機器上模擬多個瀏覽器
- 在沒有GUI的Linux OS這樣的無頭系統上運行測試
- 檢索和呈現pdf文件
- 布局測試-由于無頭瀏覽器渲染和解釋CSS和HTML像一個真正的瀏覽器,你可以使用它來測試樣式元素。
?您可能不希望使用無頭瀏覽器的例子
當然,使用真正的瀏覽器而不是無頭瀏覽器的原因有很多。例如:
您需要模擬真實的用戶
您需要直觀地看到測試運行
如果您需要進行大量調試,那么無頭調試可能會很困難。
?Popular Headless Browsers
- Google Puppeteer---它提供了一個高級API,可以通過DevTools協議控制headless Chrome或Chromium。它也可以調整使用全(非無頭)鉻或鉻。
- PhantomJS---是一個無頭的WebKit腳本,帶有JavaScript API。它對各種web標準(DOM處理、CSS選擇器、JSON、畫布和SVG)提供了快速和本機支持。*這已不再維持。正因為如此,你可能需要避免使用它。
- HtmlUnit---是一個“用于Java程序的無gui瀏覽器”。它為HTML文檔建模,并提供一個API,允許您調用頁面、填寫表單、單擊鏈接等等,就像您在“普通”瀏覽器中所做的那樣。
- Splinter--- Splinter是一個以python為中心的無頭瀏覽器選項。它是開源的,用于使用Python測試web應用程序。例如,您可以使用它來自動化瀏覽器操作,例如訪問url并與它們的條目進行交互。
- jBrowserDriver--- 一個可編程的嵌入式web瀏覽器驅動程序,兼容Selenium WebDriver規范-無頭,基于webkit,純Java
什么時候使用無頭瀏覽器進行測試?
那么,什么時候應該使用無頭瀏覽進行測試呢?正如您所看到的,這取決于您的測試目標。
左派人士經常會說,“永遠不要使用無頭瀏覽器。”一個真正的用戶永遠不會使用它,那么為什么要使用它呢?與此同時,右翼人士會說,“你應該一直使用無頭瀏覽器,因為它們總是更快,更快總是更好。”
然而,我們都知道,這并不總是一個對另一個,而是根據情況為正確的任務選擇正確的工具。
記住——為工作使用正確的工具,并始終問自己它將如何影響最終用戶,以及當在這兩種方法之間做出決定時,測試的目標是什么。