使用瀏覽器的HEADLESS模式進行自動化測試

瞭解HEADLESS模式

HEADLESS BROWSER 指的是不須要用戶界面的瀏覽器,這種瀏覽器在自動化測試和爬蟲領域有着普遍的應用。python

例如你想在網頁上運行一些測試,從網頁抓取信息,檢查瀏覽器訪問某些資源的狀態,定時截取網頁等等,你須要的是瀏覽器處理網頁但不必定須要瀏覽器界面,這些狀況都是HEADLESS BROWSER的應用場景。git

Chrome 從 59.0 開始支持HEADLESS模式(2017年5月),Firefox從 55.0 開始也支持了HEADLESS模式(2017年9月)。也就是在今年2018年的4月份,老牌的無頭瀏覽器 PhantomJS 的核心開發者宣佈再也不維護該項目,由於Chrome 和Firefox的HEADLESS模式已經足夠好並能夠替代PhantomJS。web

實踐 Selenium + HEADLESS

使用瀏覽器的HEADLESS模式進行自動化測試,你須要先知足如下前提:chrome

  • Python + Selenium 運行環境
  • Chrome 59+ 或者 Firefox 55+
  • ChromeDriver 或者 GeckoDriver 最新版已加入PATH

萬事俱備,廢話很少說咱們直接上演示代碼。瀏覽器

Chrome版實例

from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu') # 容許在無GPU的環境下運行,可選
options.add_argument('--window-size=1920x1080') # 建議設置

browser = webdriver.Chrome(chrome_options=options)
browser.get('https://www.baidu.com')
browser.find_element_by_id('kw').send_keys('HELLO')
browser.find_element_by_id('su').click()

sleep(1) # 簡單粗暴的等待,實際項目中勿用
assert browser.title == u'HELLO_百度搜索'
browser.save_screenshot('chrome-headless-test.png')

Firefox版實例

from time import sleep
from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.add_argument('--headless')
# options.add_argument('--window-size=1920x1080') # Firefox無效

browser = webdriver.Firefox(firefox_options=options)
browser.set_window_size(1280, 1024) # 啓動後設置瀏覽器大小,可是高度會隨着訪問的網頁變化

browser.get('https://www.baidu.com')
browser.find_element_by_id('kw').send_keys('HELLO')
browser.find_element_by_id('su').click()

sleep(1)
assert browser.title == u'HELLO_百度搜索'
browser.save_screenshot('firefox-headless-test.png')

總結

瀏覽器HEADLESS模式可讓程序運行的環境更貼近用戶訪問的真實環境,相對於模擬UserAgent等方式得出的數據也會更加準確可靠。多線程

尤爲在自動化測試領域,HEADLESS也有取代傳統的帶界面的自動化測試的趨勢,有一些公司已經將實踐投入生產中。咱們能夠在調試自動化測試時使用用戶界面,當部署到持續集成環境中是啓用HEADLESS,並開啓多線程使用並行的方式來運行測試案例,這樣效率會大大提升,並且由於界面被幹擾而致使測試失敗的機率也會下降。less

總的來講,至少在端對端的自動化測試中,HEADLESS模式沒有明顯的缺點,甚至能夠成爲網頁自動化測試進化的下一個目標。gitlab

參考文檔

關於做者:

Toby Qin, Python 技術愛好者,目前從事測試開發相關工做,轉載請註明原文出處。測試

歡迎關注個人博客 https://betacat.online,你能夠到個人公衆號中去當吃瓜羣衆。google

Betacat.online

相關文章
相關標籤/搜索