用docker搭建selenium grid分布式环境实践之路

Selenium Grid分布式自动化测试环境搭建与实战指南 在软件测试领域,自动化测试是提升测试效率和覆盖面的关键技术。其核心原理是通过脚本模拟用户操作,自动执行测试用例并验证结果。随着Web应用日益复杂,多浏览器、多版本、多操作系统的兼容性测试成为刚需,单机测试在效率和场景覆盖上存在明显瓶颈。分布式测试架构应运而生,它通过任务调度中心将测试任务分发到多个执行节点并行处理,能实现测试效率的成倍提升和测试环境的极大丰富。Selenium Grid作为主流的开源分布式测试解决方案,采用Hub-Node主从架构,支持灵活的资源管理和任务调度。在工程实践中,通过合理配置Hu 阅读详情

最近需要测试zoom视频会议,同时模拟100个人加入会议。经过了解,zoom提供了直接通过url链接加入会议的方式(只能通过chrome浏览器或者FireFox浏览器,因为用的协议是webrtc)。

顺着这个思路考虑可以通过Selenium自动化,同时启动多个浏览器进程,每个进程代表一个视频会议用户,达到模拟多方会议的效果。不过有以下两个难点:

  • 需要多个chrome浏览器进程同时存活,在电脑上启动一个chrome浏览器进程差不多要消耗220M左右。
  • 视频会议的音频和视频源的问题。

针对视频会议的音频和视频源的问题,chrome浏览器有比较好的支持,在Selenium脚本中初始化Chrome浏览器的参数中,只需要加入如下配置:

chrome_options.add_argument("--use-fake-ui-for-media-stream")
chrome_options.add_argument("--use-fake-device-for-media-stream")

就能在加入视频会议之后,使用虚拟的视频和音频。不过有个问题需要考虑,这个虚拟视频和真实的视频会议中的视频质量看上去是有差距的,会不会对测试结果造成影响,我们这里暂时不讨论这个话题。

现在唯一比较头疼的是怎么实现100个chrome浏览器进程,可能你会觉得,这不就是资源问题吗?加服务器不就搞定了?!但是假如有了服务器资源之后,怎么做任务调度呢?好在有Selenium Grid,它是Selenium的三大组件,专门用来执行分布式测试。

于是基于Selenium Grid设计了个测试方案:

  • 将某台服务器作为Hub,也就是master
  • 将剩下的机器作为node,注册到hub机器。
  • 本地采用多进程执行Selenium自动化脚本(我使用python语言实现的)。

按照上面的设计思路,理论上是能够模拟出100人同时加入会议的。接下来我们就正式开始用docker搭建Selenium Grid分布式环境的探索之路。

selenium jar包直接启动节点

其实,最开始我是直接使用jar包启动节点的,起几个节点还能接受,但是节点多了之后会特别麻烦,比如:想重启下节点,则需要手动全部kill掉,然后再一个个启动。

只要是手动重复的工作,就能脚本化。于是我写了两个shell脚本,一个脚本是根据传参启动对应数量的节点;另一个脚本是将所有的节点进程全部kill掉。主要脚本如下图所示:
在这里插入图片描述

虽然用脚本也能轻松的执行,但还是不方便。首先启动节点后,会增加好多java进程,并且没办法查看单个节点的日志,因为所有节点的日志都同时在控制台打印。于是考虑用docker来管理Selenium grid节点。

用docker命令直接启动

在github上有现成的镜像: https://github.com/SeleniumHQ/docker-selenium 。然后说明文档中也列出了所有可用的镜像名称,因为我主要使用chrome浏览器,所有安装了: selenium/hub 、 selenium/node-chrome、 selenium/node-chrome-debug 三个镜像,其中selenium/node-chrome-debug镜像会启动一个VNC Server,在脚本执行过程中,本地可以连上VNC Server,通过界面查看服务器的脚本执行情况。 使用命令:

$ docker pull selenium/hub
$ docker pull selenium/node-chrome
$ docker pull selenium/node-chrome-debug

启动hub的命令如下:

$ docker run -d -p 4444:4444 -e GRID_MAX_SESSION=100 --name hub selenium/hub

启动本地节点(hub和node在一台机器上)的命令如下:

$ docker run -d -p 5555:5555 -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --shm-size=2g --link hub:hub --name node1 selenium/node-chrome

启动远端节点(hub和node不在一台机器上)的命令如下:

$ docker run -d -p port:5555 -e HUB_HOST=remote_ip -e HUB_PORT=remote_port -e REMOTE_HOST=http://ip:port -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --shm-size=2g  --name node1 selenium/node-chrome

这里需要注意,网上很多教程提供的启动命令都是hub和node在一台机器上,假如需要hub和node在不同的机器上,按照网上的教程,虽然启动不会报错,但是节点和hub之间的网络是不通的。

不过直接使用docker命令虽然可以单独查看单个节点的日志,但是却和使用jar包的方式面对一样的问题:启动多个节点,非常不方便,需要手动执行多次命令。有没有更好的方案呢?当然有,可以使用docker-compose对docker容器进行整合。

docker-compose 启动

docker compose是docker的一个命令行工具,用来定义和运行多个容器组成的应用。相当于我们可以将多个docker命令放到一个文件里,然后由docker-compose一键执行。

同样的,也需要分两种情况:

Hub和node在一台机器上

可以使用如下的配置文件docker-compose.yml

version: "3"
services:
  selenium-hub:
    image: selenium/hub
    container_name: selenium-hub
    ports:
      - "4444:4444"
    environment:
      - GRID_MAX_SESSION=50
      - GRID_TIMEOUT=900
      - START_XVFB=false
  chrome:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
      - NODE_MAX_INSTANCES=5
      - NODE_MAX_SESSION=5

然后在控制台执行命令:

$ docker-compose up -d  //-d表示在后台运行

如果想同时启动多个节点该怎么办呢?非常简单:

$ docker-compose up -d --scale chrome=num   //num是要启动节点的数量

如果想关闭节点,可以执行如下命令:

$ docker-compose down

Hub和node不在一台机器上

可以使用如下配置文件docker-compose.yml

version: "3"
services:
  # selenium-chrome-1
  selenium-chrome-node-1:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5556:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5556
      GRID_TIMEOUT: 60000
    shm_size: "2gb"
  # selenium-chrome-2
  selenium-chrome-node-2:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5555:5555"
    restart: always
    stdin_open: true
    container_name: node1
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5555
      GRID_TIMEOUT: 60000
    shm_size: "2gb"
  # selenium-chrome-3
  selenium-chrome-node-3:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5557:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5557
      GRID_TIMEOUT: 60000
    shm_size: "2gb"
  # selenium-chrome-4
  selenium-chrome-node-4:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5558:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5558
      GRID_TIMEOUT: 60000
    shm_size: "2gb"

  # selenium-chrome-5
  selenium-chrome-node-5:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5559:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5559
      GRID_TIMEOUT: 60000
    shm_size: "2gb"

启动节点的命令是(前提是hub需要提前启动):

$ docker-compose up -d

关闭节点的命令是:

$ docker-compose down

遗留问题

按照我上面这种方式搭建Selenium Grid环境,本地节点可以正常执行,但是远端的节点却经常超时,不过从http://hub_ip:4444/grid/console界面上看到的节点网络全部都是通的。

之前查过一些资料,貌似需要使用Docker Swarm,它是一个docker集群管理工具, 将若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源 。不过目前还没研究它,后面如果用Docker Swarm有结论之后,我再写文章同步给大家。

总结

用docker搭建selenium grid分布式环境,非常方便,基本是一行命令就能启动或者关闭节点。希望我这篇文章能给大家提供一些思路,帮助大家在平时的工作中解决一些问题。

还是那句话,任何技术,只要能帮你解决实际的问题,就是好的技术!

Selenium Grid分布式UI自动化测试:从原理到实战部署 分布式计算通过将任务分解到多台机器并行执行,解决了单机资源瓶颈和效率低下的问题。其核心原理在于主从(Master-Slave)架构,由中心节点进行任务调度与资源管理,执行节点负责具体运算,通过网络通信协同工作。这一架构在软件测试领域价值显著,能够极大提升测试执行效率,实现环境隔离,增强测试稳定性。具体到UI自动化测试场景,Selenium Grid正是该架构的经典实现,它将测试脚本分发到配置了不同浏览器环境的节点上并行运行。通过搭建包含Hub(调度中心)和Node(执行节点)的集群,并结合Docker容器化 阅读详情

相关推荐

UI 自动化分布式测试 -Docker Selenium Grid

Docker-Selenium 是一种将 Selenium Grid 与 Docker 容器技术结合的解决方案,能够简化 Selenium Grid 的部署和管理。通过使用 Docker 容器,用户可以快速创建和销毁 Selenium Grid 环境,而不需要手动配置每个节点,极大地提高了测试环境的可移植性和可扩展性简化部署:使用 Docker,可以在几分钟内启动完整的 Selenium Grid 环境,而不需要复杂的安装和配置过程。环境隔离。

朱雀随云记的博客 1538

Docker + Selenium Grid 搭建分布式 UI 自动化测试

Selenium Grid 是 selenium 提供的一个分布式测试工具,将自动化脚本发布到多个物理机或者虚拟机(跨平台、跨浏览器)上执行,通过一个中心节点来控制多个设备,也就是在中心节点(hub)上管理测试,在其它节点(node)上执行测试,以实现 Selenium 的并行执行。除了可以在多个设备上运行测试脚本以外,Selenium Grid 也可以实现多浏览器兼容性测试。Node 本身不提供多线程并发执行,需要结合多进程技术实现并行执行用例。使用场景:Selenium Grid 架构:(Seleniu

m0_60054525的博客 3261

使用Docker进行Selenium Grid分布式测试

使用Docker进行Selenium Grid分布式测试 本文主要介绍如何使用Docker进行Selenium Grid分布式测试,附上简单例子以及遇到的一些问题,准备环境如下: CentOS 7.0 Docker 1.18 selenium/hub 镜像 selenium/node-chrome 镜像 eclipse Oxygen.3 Release JDK 1.8.0 以上 宿主主机IP...

小苏少的博客 6180

基于docker部署的Selenium Grid分布式自动化测试_docker+selenium grid

此时你可以访问:http://localhost:4444/grid/console。如果需要多个Chrome node则继续运行这个命令:docker run -d --link selenium-hub:hub selenium/node-chrome,刷新则看到多了一个Chrome实例。node机器上命令行运行:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config.json。

2401_84247449的博客 1022

基于Docker的Selenium Grid分布式测试环境搭建与实战指南

容器化技术通过将应用程序及其依赖打包成标准化的单元,实现了环境的一致性与隔离性,其核心原理是利用操作系统级别的虚拟化来封装进程、文件系统和网络。这项技术的工程价值在于能够显著提升软件交付的效率和可靠性,尤其在自动化测试领域,它能从根本上解决环境差异导致的测试不稳定问题。Docker作为主流的容器化平台,结合Selenium Grid这一分布式测试框架,可以构建出弹性的、可快速复用的测试执行环境。这种组合方案广泛应用于需要多浏览器兼容性验证、大规模回归测试以及追求高效CI/CD流水线的场景。本文聚焦于如何利用

dieyuqi2955的博客 329

SeleniumGridDocker:如何使用Selenium Grid和Docker运行并行测试

使用Docker的Selenium Grid 描述 该项目有关如何使用Selenium Grid和Docker运行并行测试。 该项目执行基本的google搜索并验证页面标题。 依存关系: Selenium 测试NG Log4J 安装 Docker安装 什么是Docker? 一个开放源代码项目,通过在Linux上提供OS级虚拟化的附加抽象层和自动化层,来自动化容器内软件应用程序的部署。 下载适用于Windows的 安装后,在命令提示符下键入docker --version命令,以确保Docker是否成功安装到我们的系统。 您需要一台Docker机器才能在Mac或Windows上安装和运行Docker。 docker machine是一种工具,可让您在虚拟主机上安装Docker Engine并使用docker-machine命令管理主机。 您可以通过键入docker-machi

基于docker部署的Selenium Grid分布式自动化测试

Selenium Grid是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。

软件自动化测试技术交流、资源分享 1431

selenium-4-grid-k8s-docker:使用Kubernetes,Docker和Selenium 4 Grid进行并行分布式测试

Selenium 4 Grid&K8s和Docker 作为模板创建的此演示演示了如何使用Kubernetes和Docker对Chrome ve Firefox Web驱动程序进行设置,以使用Selenium 4 Grid进行分布式并行测试。 要求 该项目需要 。 安装 。 安装 ,Kubernetes命令行工具。 (此项是可选的。Docker安装中添加了kubectl.exe 。) 安装以在本地运行Kubernetes。 指定适合您的操作系统的任何VM驱动程序。 查看文档以获取驱动程序列表: : 部署Kubernetes # Configure the vm-driver $ minikube config set vm-driver ' <vm> ' # Start minikube with configured CPU & memory $ m

【Selenium】Selenium4 Grid

selenium4 grid

测试小工 1924

(实战)[re:Invent 2018]-001:赛道分析-(致敬1024)

打印log

Rainbow 2769

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1039

用docker搭建selenium grid分布式环境实践

通过这些步骤,您可以使用Docker搭建Selenium Grid分布式环境,并在多个节点上并行运行Selenium测试。根据实际需求,您还可以进行更高级的配置和扩展,如增加更多的节点、配置浏览器版本等。这将下载并启动所需的镜像,并创建一个包含Selenium Hub和两个节点(一个Chrome节点和一个Firefox节点)的分布式环境。

高性价比服务器就选:蓝易云 279

【飞控】PX4 Autopilots与MATLAB/Simulink联合仿真环境搭建全攻略

本文详细介绍了在Windows系统上搭建PX4 Autopilots与MATLAB/Simulink联合仿真环境的完整流程。通过WSL2安装Ubuntu,配置UAV Toolbox支持包,并重点解决了PX4源码克隆、子模块更新等网络难题,最终实现软件在环(SITL)仿真。文章还涵盖了硬件在环(HITL)配置及常见问题排查,为无人机飞控算法开发与测试提供了高效、可靠的解决方案。

weixin_29201933的博客 541

基于Docker与Selenium Grid的分布式UI自动化测试方案实践

在软件测试领域,自动化测试是提升研发效能、保障软件质量的关键技术。其核心原理是通过脚本模拟用户操作,自动执行测试用例,从而替代重复的人工验证。随着Web应用规模扩大,单机执行UI自动化测试面临执行效率瓶颈和环境碎片化两大挑战。Docker容器技术通过封装应用及其依赖,提供了环境一致性与便携性,实现了“一次构建,处处运行”。结合Selenium Grid成熟的Hub-Node分布式调度架构,可以构建弹性的测试执行集群,将测试任务分发到多个节点并行执行。这种技术组合的价值在于显著缩短测试反馈周期,降低环境维护成

congsikuai0611的博客 443

在windows10/11中使用ipatool提取苹果app安装包ipa文件

本文介绍了在Windows10/11系统中使用ipatool工具下载苹果App安装包(.ipa)的详细步骤。首先需准备Windows电脑、AppleID账号并下载ipatool工具;具体操作包括:登录AppleID、搜索应用、获取购买授权、查看历史版本及下载指定版本。关键步骤强调获取授权的重要性,并提供了常用命令速查表,帮助用户完成从登录到下载的全过程。该教程适用于需要获取旧版本App或进行应用测试的场景。

zhengshaolin128的博客 2528

Simulink实战:5步搞定固定翼飞行器六自由度动力学建模(附模型下载)

本文提供了一份详细的Simulink实战指南,通过5个核心步骤手把手教你构建固定翼飞行器的六自由度动力学模型。内容涵盖从顶层架构设计、核心方程手动实现,到模型集成、测试调试及进阶优化的完整流程,旨在帮助航空航天学生和工程师将抽象理论转化为可运行的仿真模型,并附有模型下载。

perl8的博客 626

Selenium Grid分布式测试实战指南

摘要:SeleniumGrid作为分布式测试解决方案,通过Hub-Node架构实现跨环境并行测试,大幅提升测试效率。文章详细介绍了环境搭建、节点配置、测试脚本适配等实践方法,包括Docker部署、多类型节点配置和弹性伸缩策略。同时探讨了测试框架集成、运维监控方案及企业级最佳实践,涵盖性能监控、常见问题解决和安全加固措施。SeleniumGrid4.0的新特性进一步简化了集群管理,为构建高效稳定的自动化测试环境提供了完整方案。

2501_94471289的博客 1114

Python办公自动化:用python-docx打造专业级Word表格边框(附完整代码)

本文深入探讨了如何利用python-docx库精细控制Word表格边框,实现办公自动化。通过解析底层XML结构,提供了通用的`set_cell_border`函数,并附上完整代码,帮助用户轻松打造符合商业规范的专业级表格,提升报告、合同等文档的生成效率与视觉效果。

weixin_29089057的博客 538

分布式测试网格(Selenium Grid)配置实战

本文介绍了SeleniumGrid分布式测试架构的实战应用。通过Hub-Node架构实现多节点并行测试,显著提升测试效率(500用例从4小时缩短至24分钟)。详细讲解了从零搭建Grid环境的步骤,包括Hub启动、节点注册和测试脚本编写。进阶部分涵盖容器化部署和监控优化方案,推荐使用Docker/Kubernetes管理节点。最后分享了企业级最佳实践,包括环境隔离、版本控制和CI/CD集成,并提供了常见问题排错指南。SeleniumGrid已成为提升测试效率的关键基础设施,特别适合持续集成场景。

2501_94480392的博客 1153

随机森林遥感反演详细教程

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

热爱分享,热爱记录 2941

YOLOv11 损失函数进阶:Varifocal Loss 让正负样本精度双升

创建self.alpha = alpha # 正样本权重系数self.gamma = gamma # 聚焦系数self.lambda_reg = lambda_reg # 回归损失权重# 分类损失:Varifocal Classification Loss# 正样本权重:基于预测置信度# 计算 BCE 损失并加权cls_loss = cls_loss.sum() / (cls_true.sum() + 1e-6) # 按正样本数归一化。

m0_71589036的博客 436

Selenium WebDriver与Java:Web自动化测试全攻略

本文系统介绍了Selenium自动化测试框架的应用实践。主要内容包括:环境搭建(JDK11+、Maven配置、浏览器驱动管理);核心组件解析(WebDriver、WebElement、定位策略等);企业级测试框架设计(分层架构、PageObject模式);最佳实践(智能等待、动态元素处理等);以及持续集成和前沿技术(Selenium Grid4、Docker容器化)。文章提供了从基础配置到高级应用的完整技术路线,帮助测试人员构建高效可靠的自动化测试体系。

2501_94480392的博客 455

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 软件测试行业的职业发展路线如何?如何快速突破职业瓶颈?
下一篇: 关于手机淘宝3.25bug我的一些思考与建议
布道师玄柯
布道师玄柯 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄15年 18粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值