天天看點

加速Web自動化測試一. 問題背景二. Headless浏覽器方案三. 技術選型總結

一. 問題背景

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執行環境的建立了。

加速Web自動化測試一. 問題背景二. Headless浏覽器方案三. 技術選型總結

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方案。