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

发表于:2017-11-23 14:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:CC先生    来源:51Testing软件测试网采编

  实验背景:
  双11前,马云爸爸用诚(jin)意(qian)打造了一个超级大片《功守道》,更抢眼的是,这个被首富耽误的歌唱家,在11月4号的时候,在虾米音乐上首发了他和王菲演唱的主题曲《风清扬》。
  CC先生一时好奇想要测测虾米此次发布在各个浏览器上的兼容性,就是看看能不能正常播放。于是搭建了一个分布式的测试环境来试试。
  主要使用到的东西:
  语言:python3.5
  web自动化:selenium3.7
  应用容器引擎:Docker 1.12
  操作系统:CentOS 7
  当一个场景在单个浏览器上可以运行后,就需要考虑是否可以同时测试下兼容性,之前已经有一篇文章介绍了利用Selenium Grid来搭建测试Web兼容性的环境。
  此方案不足的地方在于需要同时使用到多个机器或者多个虚拟机,这对于资金不足或者纯上手练习的人来说不是一个好东西。
  既然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:5901 --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
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号