一. 问题背景
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执行环境的创建了。
执行测试用例
如下所示,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方案。