pytest结合selenium grid实现web自动化测试并发执行

image.png

pytest、selenium分别是自动化测试领域使用非常频繁的单元测试框架、web测试框架,当团队自动化用例达到一定数量后,如果仅在一台执行机上执行,执行时间就可能会达到几个小时以上,无法满足版本发布节点的时间要求,如何减少总的自动化用例执行时间就是不得不解决的问题,本文介绍采用pytest、selenium grid实现自动化用例的并发分布式执行方案,针对pytest和selnium本身不做详细讲解,阅读本文前你需要有pytest和selenium使用经验。

什么是selenium grid?

selenium grid是开源selenium工具集的一部分,允许你在多台机器的多个浏览器上并行的进行测试,也就是说,你可以同时运行多个测试。本质上来说就是,selenium grid支持分布式的测试执行。它可以让你的测试在一个分布式的执行环境中运行。

通常,以下两种情况你会需要使用 selenium grid:

  • 在多个浏览器中运行测试,在多个版本的浏览器中进行测试,或在不同操作系统的浏览器中进行测试。

  • 减少测试运行时间。

selenium grid由一个中心Hub节点和大于等于1个的Node节点组成,所有的Node节点都要注册到Hub节点。测试执行时所有的请求发送到Hub节点,Hub节点再将执行指令分发到多个注册的Node节点,Node节点是真正执行Web测试的节点,就相当于selenium本机执行一样,Node节点也需要事先配置好Webdriver并将Webdriver路径加入到环境变量中。这里有几点需要重点澄清:

  • selenium grid只是将webdriver分发到多个分布式Node节点执行,就相当于只是借用Node节点的浏览器而已,仅此而已,整体运行流程和单个执行机执行没有区别。

  • selenium grid只是具备分布式运行能力,但是本身运行并不是并发的,也就是说默认情况下即使使用了selenium grid,用例仍然是按照顺序执行完毕一个才会执行下一个,总的执行时间并不会减少,还需要配合其他的并发机制来做到降低执行时间。

  • Hub和Node节点可以部署在同一台执行机上,也可以部署在不同的执行机上;同一台执行机也可以支持启动多个Node节点。往往自动化用例执行期间对系统资源的消耗并不高,如果一台服务器只开启一个运行实例必然造成资源的浪费,况且在实际情况下,团队往往也不可能提供足够充裕的执行机用于自动化测试,因此在一台执行机上启动多个运行实例就非常有用,可以大大减少硬件资源的投入。

selenium grid的部署

1. 下载selenium grid

我调测下载的是selenium grid3版本

www.selenium.dev

图片

2. 因为我只有一台电脑用来调测,所以Hub和Node节点我都部署在一台执行机上,规划如下

| Hub节点 | 192.168.31.200:4444 |
| Node节点1 | 192.168.31.200:5555 |
| Node节点2 | 192.168.31.200:5556 |

3. 打开cmd窗口,启动Hub节点

java -jar selenium-server-standalone-3.141.59.jar -role hub -port 4444
图片

4. 打开两个新的cmd窗口,启动Node1、Node2节点

注:Node节点需要下载正确的webdriver,并将webdriver路径加入到系统环境变量中,本文仅以chrome webdriver进行举例,如需其他浏览器执行用例,请类比自行完成相关配置。

java -jar selenium-server-standalone-3.141.59.jar -role node  -hub http://192.168.31.200:4444/grid/register/ -browser "browserName=chrome,maxinstance=5,platform=WINDOWS" -port 5555java -jar selenium-server-standalone-3.141.59.jar -role node  -hub http://192.168.31.200:4444/grid/register/ -browser "browserName=chrome,maxinstance=5,platform=WINDOWS" -port 5556
图片
图片

5. 浏览器访问URL:192.168.31.200:4444/gri 可以看到两个Node节点已正常注册,至此selenium grid部署完成。实际情况下,Node节点往往需要部署到多个不同的服务器或虚拟机上,单台服务器或虚拟机往往也有必要部署多个Node节点以节省硬件资源需求。

图片

pytest-xdist实现并发执行测试用例

本文前面提到selenium grid执行并不是并发的,要实现并发执行测试用例还需要多线程机制配和,pytest-xdist插件支持多线程并发执行测试用例,首先使用pip安装pytest-xdist插件。

pip install pytest-xdist

安装成功后,执行如下命令即可实现并发执行,其中-n后面的参数表示cpu的数量,也可以指定为auto,它会自动检测cpu核数并发运行用例。

pytest -n 6pytest -n auto

另外,selenium需要通过Remote方式执行,以chrome为例,关键部分的代码如下:

from selenium import webdriverdriver = webdriver.Remote(command_executor="http://192.168.31.200:4444/wd/hub"),                          desired_capabilities={                             "browserName": "chrome",                             "javascriptEnabled": True                          })driver.get("https://www.baidu.com")driver.find_element_by_id("kw").send_keys("search content")driver.find_element_by_xpath('//input[@type="submit"]').click()

相比于非Remote方式,仅仅是新建webdriver实例的方式不同,如果以前的测试代码是以本地方式执行,则仅需将webdriver.Chrome创建实例方法修改为webdriver.Remote方法,其中command_executor参数仅需传入Hub节点的连接,实际执行时Hub节点会自动选择已注册的Node节点进行执行,同时Hub节点也会自动检测到失效的节点并及时将其剔除。

pytest结合selenium grid进行并发执行结果参考如下:

图片
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容