Selenium Grid容器化-分布式测试
收藏




本文分享技术的关键词


  • 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执行节点。具体解释如下:

1
2
3
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: 环境准备

1
2
3
4
5
6
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中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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:启动服务

1
docker-compose up -d  # 启动服务


step-4: 动态扩缩容node节点

1
2
docker-compose scale chrome=3    #指定支持chrome节点的实例数量
docker-compose scale firefox=3   #指定支持firefox节点的实例数量


step-5: 访问

1
http://localhost:4444/grid/console #访问Hub,能看到node节点都已注册上。



Client Demo演示


上面通过docker-compose已成功部署了Selenium Grid,其中心HUB服务端口为4444,测试脚本需要指向该端口。下面通过一个简单的测试Demo进行演示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

1
2
3
4
FROM python:3
COPY test.py ./
RUN pip install selenium
CMD [ "python3", "./test.py" ]

step-2: 制作image

1
2
docker build -t  selenium-base:latest .
#在Dockerfile所在目录执行如上命令, 镜像名为:selenium-base

step-3:使用基础镜像运行测试脚本

1
2
docker run -it  --net=host selenium-base
#执行成功输出:百度一下,你就知道


总结

本文介绍了使用docker-compose一键拉起Selenium Grid分布式测试环境,简单python脚本Demo执行自动化测试,最后将python的依赖统一做成基础镜像,演示了从部署到执行脚本完全容器化到流程。例子很简单,旨在提供一种容器化思路。当部署程序步骤比较繁琐且需要重复进行,都可以考虑将其容器化。


参考文档

docker-selenium-github:https://github.com/SeleniumHQ/docker-selenium/wiki/Getting-Started-with-Docker-Compose
python-dockerHub:https://hub.docker.com/_/python
selenium-grid:https://seleniumhq.github.io/docs/site/en/grid/components_of_a_grid/




关于睿云智合


深圳睿云智合科技有限公司成立于2012年,总部位于深圳,并分别在成都、深圳设立了研发中心,北京、上海设立了分支机构,核心骨干人员全部为来自金融、科技行业知名企业资深业务专家、技术专家。早期专注于为中国金融保险等大型企业提供创新技术、电子商务、CRM等领域专业咨询服务。


自2016年始,在率先将容器技术引进到中国保险行业客户后,公司组建了专业的容器技术产品研发和实施服务团队,旨在帮助中国金融行业客户将容器创新技术应用于企业信息技术支持业务发展的基础能力改善与提升,成为中国金融保险行业容器技术服务领导品牌。


此外,凭借多年来在呼叫中心领域的业务经验与技术积累,睿云智合率先在业界推出基于开源软交换平台FreeSwitch的微服务架构多媒体数字化业务平台,将语音、视频、webchat、微信、微博等多种客户接触渠道集成,实现客户统一接入、精准识别、智能路由的CRM策略,并以容器化治理来支持平台的全应用生命周期管理,显著提升了数字化业务处理的灵活、高效、弹性、稳定等特性,为帮助传统企业向“以客户为中心”的数字化业务转型提供完美的一站式整体解决方案。


客户与合作伙伴


大家快来扫我!

这里有你想了解的行业资讯和你所需要的技术干货!!


大家关注【Wise2C】后回复【进群】,睿云小助手会第一时间把拉你进入【 Docker企业落地实践群】,我们分享的各个企业案例项目的技术专家与用户代表,正在敬候您的光临!

若需要了解更多有关Wise系列PaaS产品的详情,请与我们的市场团队联系:contact@wise2c.com