加速Web自動化測試

weixin_34107955發表於2016-12-07

一. 問題背景

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

1884963-9d9ec95de801474c.png
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方案。

相關文章