Docker+Selenium Grid+Python搭建分布式测试环境

本来想取名字为:双11前为马云爸爸疯狂打Call
鉴于此账号人设的正经脸,还是决定使用程序员看得懂的标题:Docker+Selenium Grid+Python搭建分布式测试环境
(如转载的时候需要用到第一个标题名称,请 简信 联系CC先生)

实验背景:
双11前,马云爸爸用诚(jin)意(qian)打造了一个超级大片《功守道》,更抢眼的是,这个被首富耽误的歌唱家,在11月4号的时候,在虾米音乐上首发了他和王菲演唱的主题曲《风清扬》。

CC先生一时好奇想要测测虾米此次发布在各个浏览器上的兼容性,就是看看能不能正常播放。于是搭建了一个分布式的测试环境来试试。

主要使用到的东西:
语言:python3.5
web自动化:selenium3.7
应用容器引擎:Docker 1.12
操作系统:CentOS 7

当一个场景在单个浏览器上可以运行后,就需要考虑是否可以同时测试下兼容性,之前已经有一篇文章介绍了利用Selenium Grid来搭建测试Web兼容性的环境,有意者请挪步(http://www.jianshu.com/p/d53d0b6d8d5b)。
此方案不足的地方在于需要同时使用到多个机器或者多个虚拟机,这对于资金不足或者纯上手练习的人来说不是一个好东西。

既然Docker现在已经如此流行,此次尝试着在Docker的环境中搭建用于兼容性Web测试的分布式测试环境。

目标:
1.成功搭建docker结合selenium构建分布式测试环境。
2.编写脚本执行web的自动化测试分布式测试。


阅读时长 15分钟(如果一步步上手试的话,加上pull images的时间,一下午足够了)

预热准备:

  • 在VMware Workstation12 pro上安装一个Centos7 的虚拟机(需要64位)
  • 网络模式切换为NAT模式(方便的话也可以选取桥接模式)
  • 在NAT模式下做端口的映射(5555->8126,4444->8127,5900->8128,5901->8129)
  1. 安装Docker
    官网地址:https://www.docker.com/(里面有多个系统的支持)
    具体安装过程可参考(http://www.cnblogs.com/scoter2008/p/6058496.html

  2. 获取docker镜像
    如果之前完全没有接触过Docker的同学,可以先假设docker为一种轻量级的虚拟机,然后在虚拟机里搭建各种环境,在需要的时候,直接启动即可。

官方说明Docker的核心组件为:

  • Docker 客户端和服务器;
  • Docker 镜像;
  • Registry;
  • Docker 容器

或者像我这样理解:

汉堡包.jpg

镜像就像是汉堡包中的生菜,牛肉或者面包片,任何操作的来源都是从镜像开始的,找到合适的镜像,你就可以搭建属于自己的汉堡包(容器)。一般都可以去docker的公共仓库找一些已经做好的镜像。

1) 查找Selenium相关镜像
命令为:
docker search selenium


查找镜像.png

此次我们需要3个镜像(1个Hub,2个Node),同时为了可以直观的看到实验结果,决定选用自带VNC Server的版本。获取官网上的镜像命令为:
docker pull selenium/hub
docker pull selenium/node-firefox-debug
docker pull selenium/node-chrome-debug
如果下载镜像不成功,就多试几次,再不行就翻墙再下载。

全部下载完成以后

2)输入查看镜像列表命令为:
docker images

镜像列表.png

3.运行docker镜像

镜像已经准备好了以后,接下来就是运行镜像,在docker的世界里叫做启动容器,通俗点就是启动了虚拟机。

输入以下命令:
docker run -d --name selenium-hub -p 4444:4444 selenium/hub

docker run -d -P -p 5900:5900 --link selenium-hub:hub selenium/node-chrome-debug

docker run -d -P -p 5901:5900 --link selenium-hub:hub selenium/node-firefox-debug

docker ps -a
可以看到以下内容

运行镜像.png

以上四条命令的作用分别是:
第一条:启动一个Hub的镜像,名称为selenium-hub
第二条:启动一个node的镜像(带chrome浏览器),和vnc通信的端口为5900
第三条:启动一个node的镜像(带firefox浏览器),和vnc通信的端口为5901

检查hub和node的链接情况,用命令:
docker logs selenium-hub

查看hub启动情况.png

使用过Selenium Grid的人都应该比较熟悉此处的日志,实际上就是用java 去启动selenium-server-standalone-×××.jar,然后注册node到selenium-server上。

最后通过浏览器来访问:http://[hubip]:4444/grid/console 的时候会出现以下的界面:

gridconsole.png

(此处的URL里面的不是4444端口是因为,CC先生的虚拟机用的是NAT网络模式,所以将docker容器里的4444端口映射成了宿主机的8127)

4.安装VNC viewer,查看docker容器
vnc viewer是一款优秀的远程控制工具软件
官网下载地址:https://www.realvnc.com/en/connect/download/viewer/
安装好以后File->New connection,在弹出的界面中输入node的ip和端口号,保存后启动。
连接,会要求输入密码,默认密码就是secret
启动后的场景如下图:

VNC.png

(注:图片中的端口号为8128而不是5900同样是因为NAT的缘故做了映射,正常情况下就是ip:5900)

5.打开Pycharm运行测试脚本

import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

 #指定运行主机与端口号,也就是上一步在浏览器中输入的地址,只是换了之后的相对路径/grid/console换为/wd/hub

driver = webdriver.Remote(
     command_executor='http://172.16.0.21:8127/wd/hub',
     desired_capabilities=DesiredCapabilities.CHROME)

base_url='http://www.xiami.com/song/1797262971'
driver.get(base_url)
driver.implicitly_wait(300)
driver.find_element_by_link_text('立即播放').click()
time.sleep(6000)
driver.close()

此时debug模式的好处就体现出来了。你可以在第4步打开的VNC Viewer窗口中观看到完整的脚本运行过程。

风清扬.gif

至此为止,我们也就把Docker+Selenium Grid+Python的方式构建好了一个分布式测试环境。(并在虾米音乐上为马云爸爸打call了无数次)

彩蛋:
用于Docker中的不确定性和做实验时也许新建了很多个容器,看起来很多很烦,你可以试试以下几个命令:

  • 清除(关闭全部容器) :docker kill $(docker ps -a -q)
  • 删除全部容器:docker rm $(docker ps -a -q)
  • 再次查看容器情况,运行:docker ps –a 发现整个世界都清净了。

后续还可以探索的方向还有:

  • 页面上中文的乱码问题
  • 和RF的结合,生成可行的测试报告
  • 和Jenkins结合,完成整个持续集成
  • 定制适合业务场景的Dockerfile
  • etc

参考:
https://github.com/SeleniumHQ/docker-selenium
https://testerhome.com/topics/8517
http://www.docker.org.cn/book/docker/what-is-docker-16.html

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

推荐阅读更多精彩内容