Selenium Grid容器化-分布式测试

发表于:2019-9-25 10:50

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

 作者:heguangzhi译者    来源:wise2c

  本文分享技术的关键词
  Selenium Grid 容器化
  Demo演示(容器环境下分布式自动化测试
  基础镜像 (python+selenium依赖容器化)
  本文分享的目的:实现Selenium Grid容器化,大大提高部署分布式测试环境效率,减少环境依赖。内容将介绍在容器环境中一键部署Selenium Grid,动态伸缩node节点,制作测试脚本的基础镜像。
  Selenium Grid
  Selenium作为web应用程序自动化测试利器之一,它支持多种客户端脚本(如:Java,Python,JavaScript等),并且可运行在多种浏览器中(如:chrome,firefox等)。Selenium经常被用于测试web应用程序在不同浏览器的兼容性。在企业级自动化测试中,常常结合Selenium组件Selenium Grid实现多节点分布式自动化测试。
  Selenium Grid由中心管理服务Hub和多个node节点组成,node节点需要注册到Hub服务中。使用传统方式部署分布式测试环境比较繁琐和费时,本文将介绍使用docker-compose的方式实现一键部署Selenium Grid分布式测试环境。
  
  如上图所示,要实现分布式测试,需要client测试脚本,HUB中心服务以及NODES执行节点。具体解释如下:
  HUB: 中心节点服务,用于管理多个node节点,接受Client测试脚本的测试任务,将任务分配给多个node节点执行。
  NODES: 真正执行测试任务的节点服务,支持多种浏览器进行测试,如:chrome firefox, node服务需注册到Hub中心服务,由中心服务统一分发任务。
  Client: 这里是抽象概念,可理解为执行测试逻辑到客户端(代码),Client客户端需连接到Hub服务,执行测试脚本时由Hub中心服务统一分发给node节点进行执行。
  docker-selenium
  docker-selenium 实现了在容器环境中使用docker-compose方式快速部署Selenium Grid,伸缩node节点,下面通过详细步骤介绍部署方法。
  step-1: 环境准备
   docker  --version         #确认已安装docker
  docker-compose  --version #确认已安装docker-compose
  如未安装请参考:
  https://docs.docker.com/install/         #先安装docker
  https://docs.docker.com/compose/install/ #安装docker-compose
  step-2: docker-compose一键拉起Hub和nodes
  创建文件名为:docker-compose.yml,将如下内容填充到docker-compose.yml中
   version: '2'
  services:
  firefox:
  image: selenium/node-firefox:3.14.0-gallium  #node服务镜像,支持firefox
  volumes:
  - /dev/shm:/dev/shm                        #挂在目录 /dev/shm
  depends_on:
  - hub                                      #depends_on 注册到Hub服务
  environment:
  HUB_HOST: hub
  chrome:
  image: selenium/node-chrome:3.14.0-gallium  #node服务镜像,支持chrome
  volumes:
  - /dev/shm:/dev/shm                       #挂在目录 /dev/shm
  depends_on:                                 #depends_on 注册到Hub服务
  - hub
  environment:
  HUB_HOST: hub
  hub:
  image: selenium/hub:3.14.0-gallium          #中心服务hub镜像
  ports:
  - "4444:4444"                             #暴露容器端口为4444,后面client代码需要访问这个端口
  step-3:启动服务
 docker-compose up -d  # 启动服务
  step-4: 动态扩缩容node节点
   docker-compose scale chrome=3    #指定支持chrome节点的实例数量
  docker-compose scale firefox=3   #指定支持firefox节点的实例数量
  step-5: 访问
 http://localhost:4444/grid/console #访问Hub,能看到node节点都已注册上。
 
  Client Demo演示
  上面通过docker-compose已成功部署了Selenium Grid,其中心HUB服务端口为4444,测试脚本需要指向该端口。下面通过一个简单的测试Demo进行演示。
   from selenium import webdriver
  from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  chrome = webdriver.Remote(
  command_executor='http://localhost:4444/wd/hub',
  desired_capabilities=DesiredCapabilities.CHROME)
  firefox = webdriver.Remote(
  command_executor='http://localhost:4444/wd/hub',
  desired_capabilities=DesiredCapabilities.FIREFOX)
  chrome.get('https://www.baidu.com')
  print(chrome.title)
  firefox.get('https://www.baidu.com')
  print(firefox.title)
  测试客户端代码指向Hub中心服务:http://localhost:4444/wd/hub'
  将如上测试脚本另存为:test.py, 执行:python test.py 。执行成功输出:百度一下,你就知道。
  selenium 测试脚本支持:Java Python JavaScript Ruby
  更多请参考:https://seleniumhq.github.io/docs/site/en/
  基础镜像
  Demo演示需要依赖python以及selenium,才能执行测试脚本。试想如果我们把该测试脚本放到不同环境中,又需要安装一次python和seleniumyi依赖,很是繁琐。我们可以考虑将测试脚本需要的依赖做成一个基础镜像。
  step-1: 编写Dockerfile
   FROM python:3
  COPY test.py ./
  RUN pip install selenium
  CMD [ "python3", "./test.py" ]
  step-2: 制作image
  {{{docker build -t selenium-base:latest .
  在Dockerfile所在目录执行如上命令, 镜像名为:selenium-base}}}
  step-3: 使用基础镜像运行测试脚本
  {{{docker run -it --net=host selenium-base
  执行成功输出:百度一下,你就知道}}}
  总结
  本文介绍了使用docker-compose一键拉起Selenium Grid分布式测试环境,简单python脚本Demo执行自动化测试,最后将python的依赖统一做成基础镜像,演示了从部署到执行脚本完全容器化到流程。例子很简单,旨在提供一种容器化思路。当部署程序步骤比较繁琐且需要重复进行,都可以考虑将其容器化。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号