一. 問題背景
Web自動化測試,主要花費的時間在于UI自動化驗收測試。特别是對于一些有工作流的Web應用來說,一個測試用例單次執行超過20分鐘很正常。是以,如何去加速我們的測試用例執行,是每個測試人員必須要認真考慮的問題。
二. Headless浏覽器方案
為了加快浏覽器執行自動化指令的速度,我們選擇Headless浏覽器, phantomjs來作為自動化執行的浏覽器,phantomjs不需要對頁面進行渲染。是以可以大幅加快指令執行的速度。
三. 技術選型
我們基于selenium grid技術,來搭建phantomjs測試執行環境。
- selenium-hub
- selenium-node-phantomjs
這裡我們利用docker來建立我們的上述環境。我們可以用docker compose來編排我們的環境。也可以獨立建立。為了使大家更清楚,我們一步一步來建立phantomjs執行環境。
第一步
通過docker啟動selenium hub服務
> docker run -d -P --name selenium-hub selenium/hub
啟動後,進入
http://localhost:4444/grid/console#,檢視hub的情況。
第二步
通過docker啟動selenium-node-phantomjs節點,并注冊到hub上。
> docker run -d --link selenium-hub:hub --name node-phantomjs akeem/selenium-node-phantomjs
這樣,我們就完成了基本的selenium phantomjs執行環境的建立了。

node-phantomjs
執行測試用例
如下所示,test.py是一個基本的測試用例執行檔案。
from selenium.webdriver.remote.webdriver import WebDriver
from time import sleep
import py.test
SELENIUM_HOST = "localhost"
SELENIUM_PORT = "4444"
def test_get_url():
sleep(10)
TEST_URL = "http://httpbin/html"
driver = WebDriver("http://%s:%s/wd/hub" % (SELENIUM_HOST, SELENIUM_PORT),desired_capabilities={"browserName": "phantomjs"})
driver.get(TEST_URL)
elem = driver.find_element_by_tag_name("h1")
assert "Moby-Dick" in elem.text
運作
> python test.py
總結
Headless浏覽器能夠加速我們的測試用例執行,同時phantomjs是webkit核心,是以和利用chrome浏覽器執行是效果一緻的。
如果不是對頁面渲染有很高要求的測試業務,推薦大家采用phantomjs方案。