本文分享技术的关键词
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'
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),我们将立即处理