加速Web自动化测试

作者: wywincl | 来源:发表于2016-12-07 17:24 被阅读505次

一. 问题背景

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

相关文章

网友评论

  • 波_0b47:我们公司业务明确不支持 chrome😇😇😇 然后每次IE 浏览器获取元素,有ID或者name的时候,就庆幸自己,没有的时候,就死盯着屏幕数数。请问您有什么更好的方法或者建议吗?
    波_0b47: @波_0b47 就是有的元素没有ID,name,只能绝对路径+相对绝对路径定位,要数tr或者td 在tbody下第十几个位置
    wywincl:数数是什么意思?
    wywincl:@波_0b47 没有ID或者name的话,不是还可以用xpath或者是css locator方式吗,一般推荐用css locator或者是xpath方式,name方式有可能会重名,而id方式,好多新型的前段框架id是随机生成的,每次可能都不一样。(IE8以及之前的版本对标准的ECMAScript并不是100%支持,IE11以后包括Edge版本逐步兼容了WebDriver协议,并且提供了相应的驱动 (https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/tools/webdriver))
  • 波_0b47:在ride 起步进行web UI 测试阶段,消化还得再查查资料。多谢分享

本文标题:加速Web自动化测试

本文链接:https://www.haomeiwen.com/subject/stxjmttx.html