文章目录

  • 1、如何使用 docker-compose 部署 selenium grid
    • 1.1 配置容器的常用参数
    • 1.2 如何快速开始部署一个火狐浏览器容器?
    • 1.3 如何访问容器内部?
      • 1.3.1 第一种:通过 VNC 客户端访问
      • 1.3.2 第二种:通过 浏览器 访问容器
    • 1.4 集线器(hub)和 节点(node)
      • 1.4.1 node 跟 hub 在一台linux上
        • 1、单独部署
        • 2、docker-compose 集成部署
      • 1.4.2 node 在其他linux上

1、如何使用 docker-compose 部署 selenium grid

产品文档 - SeleniumHQ / docker-selenium

https://github.com/SeleniumHQ/docker-selenium

产品文档 - Selenium Grid 4

https://www.selenium.dev/documentation/grid/

产品文档 - selenium

https://www.selenium.dev/documentation/

1.1 配置容器的常用参数

  • –scale chrome=num

docker-compose up -d --scale chrome=num //num是要启动节点的数量,chrome是docker-compose文件中节点的名称

  • VNC_NO_PASSWORD=1

没有密码验证的情况下运行 VNC

  • VNC_VIEW_ONLY=1

仅查看模式下运行 VNC

  • -e SE_EVENT_BUS_HOST= < event_bus_ip | event_bus_name >
  • -e SE_EVENT_BUS_PUBLISH_PORT=4442
  • -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443

节点配置选项: 告诉节点事件总线在哪里,以便它可以注册自己。

  • -e SE_NODE_MAX_SESSIONS=10

增加每个容器的会话并发性

  • –shm-size=“2g”

来使用主机的共享内存,防止容器崩溃,这是避免浏览器在 docker 容器内崩溃的已知解决方法,这里是 Chrome和Firefox的记录问题。2gb 的 shm 大小是任意的,但已知效果很好,您的特定用例可能需要不同的值,建议根据您的需要调整此值。

  • -v /home/ubuntu/files:/home/seluser/files

注意:mkdir /home/ubuntu/files
chown 1200:1201 /home/ubuntu/files
挂载数据卷前操作

  • -e SE_OPTS= “–log-level FINE”

可以通过将环境变量传递给容器来增加日志输出

  • docker logs -f <容器 ID | 容器名称>

所有输出都发送到标准输出,因此可以通过运行检查

  • -e JAVA_OPTS=-Xmx512m

告诉节点事件总线在哪里,以便它可以注册自己。

  • -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443
  • -e SCREEN_WIDTH=1366
  • -e SCREEN_HEIGHT=768
  • -e SCREEN_DEPTH=24
  • -e SCREEN_DPI=74

设置屏幕分辨率

  • -e SE_NODE_SESSION_TIMEOUT

网格 URL 和会话超时,默认300秒

  • -e E_SESSION_REQUEST_TIMEOUT=500

超时为 500 秒

  • -e SE_SESSION_RETRY_INTERVAL=2

重试间隔为 2 秒

  • -e SE_NODE_OVERRIDE_MAX_SESSIONS true

启用视频录制

  • -e START_XVFB=false

以无头模式运行,默认是true

1.2 如何快速开始部署一个火狐浏览器容器?

  1. docker run -d -p 4444:4444 -p 7900:7900 --shm-size=2g selenium/standalone-firefox:4.1.2-20220131
  2. 查看部署的火狐浏览器:http://ip:4444
  3. 查看容器内发生的情况:http://ip:7900,密码:secret

1.3 如何访问容器内部?

1.3.1 第一种:通过 VNC 客户端访问

docker-selenium 项目使用的是 x11vnc 作为 VNC 服务器
VNC (Virtual Network Console) 是虚拟网络控制台的缩写。它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。
VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。x11vnc 允许人们使用任何VNC 查看器远程查看并与真实的X 显示器(即对应于物理监视器、键盘和鼠标的显示器)进行交互。通过这种方式,它扮演了 WinVNC 为 Windows 扮演的角色,适用于 Unix/X11
在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。
我们这里使用了其中的两个命令:vncserver【容器里面使用的是这个】 和 vncviewer【VNC客户端】。

  1. 下载VNC客户端:https://www.realvnc.com/de/connect/download/viewer/
  2. VNC 客户端访问容器内部,默认端口是: 5900
  3. 启动容器[启动一个后,再启动就会显示4444端口占用]:

谷歌:docker run -d -p 4444:4444 -p 5900:5900 --shm-size=2g selenium/standalone-chrome:4.1.2-20220131
火狐:docker run -d -p 4444:4444 -p 5902:5900 --shm-size=2g selenium/standalone-firefox:4.1.2-20220131
edge:docker run -d -p 4444:4444 -p 5901:5900 --shm-size=2g selenium/standalone-edge:4.1.2-20220131

  1. 输入 xxx.xxx.xxx.xxx : 5900 ,直接enter,输入密码:secret

1.3.2 第二种:通过 浏览器 访问容器

浏览器访问容器内部,原理是通过: noVNC
noVNC 既是 HTML VNC 客户端 JavaScript 库,又是构建在该库之上的应用程序,可以用来访问容器内部,默认端口是7900
noVNC 在任何现代浏览器中都能很好地运行,包括移动浏览器(iOS 和 Android)

  1. 启动所需浏览器的容器

docker run -d -p 4444:4444 -p 7900:7900 --shm-size=“2g” selenium/standalone-chrome:4.1.2-20220131
docker run -d -p 4444:4444 -p 7901:7900 --shm-size=“2g” selenium/standalone-edge:4.1.2-20220131
docker run -d -p 4444:4444 -p 7902:7900 --shm-size=“2g” selenium/standalone-firefox:4.1.2-20220131

  1. 浏览器查看容器内部

http://localhost:7900/ 连接到 Chrome 容器
http://localhost:7901/ 连接到 the Edge 容器
http://localhost:7902/ 连接到 the Firefox 容器

1.4 集线器(hub)和 节点(node)

1.4.1 node 跟 hub 在一台linux上

1、单独部署

1、创建docker网络:docker network create grid
2、创建hub集线器:docker run -d -p 4442-4444:4442-4444 --net grid --name selenium-hub selenium/hub:4.1.2-20220131
3、创建node节点1:docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub --shm-size=2g -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 selenium/node-chrome:4.1.2-20220131
4、创建node节点2:docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub --shm-size=2g -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 selenium/node-edge:4.1.2-20220131
5、创建node节点3:docker run -d --net grid -e SE_EVENT_BUS_HOST =selenium-hub --shm-size=2g -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 selenium/node-firefox:4.1.2-20220131
6、使用完成后,删除容器:docker rm 容器id,删除网格:docker network rm grid

2、docker-compose 集成部署

  1. 创建 docker-compose-seleniumgrid.yml 文件
version: "3"
services:chrome:image: selenium/node-chrome:4.1.2-20220208shm_size: 2gbdepends_on:- selenium-hubports:- "7901:7900"environment:- SE_EVENT_BUS_HOST=selenium-hub- SE_EVENT_BUS_PUBLISH_PORT=4442- SE_EVENT_BUS_SUBSCRIBE_PORT=4443- SE_NODE_SESSION_TIMEOUT=350- SE_NODE_MAX_SESSIONS=10edge:image: selenium/node-edge:4.1.2-20220208shm_size: 2gbdepends_on:- selenium-hubports:- "7902:7900"environment:- SE_EVENT_BUS_HOST=selenium-hub- SE_EVENT_BUS_PUBLISH_PORT=4442- SE_EVENT_BUS_SUBSCRIBE_PORT=4443- SE_NODE_SESSION_TIMEOUT=350- SE_NODE_MAX_SESSIONS=5firefox:image: selenium/node-firefox:4.1.2-20220208shm_size: 2gbdepends_on:- selenium-hubports:- "7903:7900"environment:- SE_EVENT_BUS_HOST=selenium-hub- SE_EVENT_BUS_PUBLISH_PORT=4442- SE_EVENT_BUS_SUBSCRIBE_PORT=4443- SE_NODE_SESSION_TIMEOUT=350- SE_NODE_MAX_SESSIONS=8selenium-hub:image: selenium/hub:4.1.2-20220208container_name: selenium-hubports:- "4442:4442"- "4443:4443"- "4444:4444"
  1. 启动容器:docker-compose -f docker-compose-seleniumgrid.yml up -d

-f:指定yml文件
up:启动容器
-d:后台启动

  1. 使用谷歌浏览器运行脚本:pytest test_专家管理.py::ExpertManage::test_003 --server=ip --port=4444 --locale=zh_cn -n=3

[默认使用谷歌]

  1. 或者使用火狐浏览器:pytest test_专家管理.py::ExpertManage::test_003 --server=ip --port=4444 --locale=zh_cn -n=3 --browser=firefox

–server=ip --port=4444:部署 selenium grid 的ip
–locale=zh_cn:启动的浏览器默认是中文语言
-n = 3:分布式运行用例

  1. 停止容器:docker-compose -f docker-compose-v3.yml down
  2. 访问上面三个容器:

谷歌:http://ip:7901
edge:http://ip:7902
火狐:http://ip:7903

1.4.2 node 在其他linux上

  1. 虚拟机1启动hub集线器:

docker run -d -p 4442-4444:4442-4444 --name selenium-hub selenium/hub:4.1.2-20220131

  1. 虚拟机2启动node节点:

docker run -d -p 5555:5555 --shm-size=2g -e SE_EVENT_BUS_HOST=机器1IP -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST=机器2IP selenium/node-chrome:4.1.2-20220131

  1. 虚拟机3启动node节点:

docker run -d -p 5555:5555 --shm-size=2g -e SE_EVENT_BUS_HOST=机器1IP -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST =机器3IP selenium/node-edge:4.1.2-20220131

  1. 虚拟机4启动node节点:

docker run -d -p 5555:5555 --shm-size=2g -e SE_EVENT_BUS_HOST=机器1IP -e SE_EVENT_BUS_PUBLISH_PORT=4442 -e SE_EVENT_BUS_SUBSCRIBE_PORT=4443 -e SE_NODE_HOST =机器4IP selenium/node-firefox:4.1.2-20220131

seleniumbase学习总结5 - docker-compose集成部署执行环境相关推荐

  1. Docker Compose搭建consul群集环境(了解Docker Compose及常用命令,Docker四种网络,Doker指定端口)

    文章目录 Docker Compose搭建consul群集环境 认识Docker Compose IConsul Docker Compose容器编排 Dasker Compose配置常用字段 Bos ...

  2. Docker——compose简述部署

    前言 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置: ●支持健康检查,允许存储键值对: ●基于Golong语言,可移植性强: ●支持ACL访问控制: 与Doc ...

  3. react不同环境不同配置angular_DevOps 前端项目(angular、vue、react)打包静态资源生成一份Docker镜像支持部署不同环境...

    1.前言 为了尽可能地轻量化前端镜像(非node承载),将前端编译成静态资源通过nginx承载. 与后端程序不同的是,当使用静态资源方式时页面是直接加载到浏览器进行渲染,无法读取服务端机器中 env ...

  4. docker compose java_Docker-compose部署java项目

    Docker-compose部署java项目 前置条件: 安装docker 安装docker-compose 防火墙啥的都设置好 dockerfile-demo FROM java:8 VOLUME ...

  5. MySQL NDB Cluster使用docker compose一键部署

    本文主要用来学习MySQL NDB Cluster 解决学习过程中的痛点:需要开启N台VMware虚拟机,电脑不堪重负 使用docker部署,完美解决 本文使用的docker image: mysql ...

  6. docker使用docker compose file部署项目时,实现容器卷挂载,并对容器内文件夹赋予权限

    为了能使容器内的SpringBoot项目的日志方便查看,我想用容器卷挂载的方式,将容器内生成的日志文件挂载到服务器上,实现同步,即使生成了新的镜像,依赖于compose file的配置,也能使日志在服 ...

  7. docker compose mysql_docker-compose部署MySQL

    第一步.安装docker: [root@localhost ~]# yum install docker 第二步.配置docker-compose.yml文件 ①在根目录下创建docker-compo ...

  8. jenkins+git+maven+docker持续集成部署

    环境准备: 安装centos7.1系统,最小化安装 设置好网络和防火墙  网络需要能访问外网, ip 192.168.1.7 下面关闭防火墙 setenforce 0 systemctl stop f ...

  9. Docker最佳实践-部署LNMP环境

    标签(linux): docker 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 环境准备 [root@docker ~]# cat /etc/redhat-r ...

最新文章

  1. kubernetes关键特性和概述
  2. Windows 命令行输入输出重定向问题
  3. oracle简版如何打开,如何打开和关闭Oracle游标
  4. 日志查看工具 linux,用 Logwatch 工具查看 Linux 系统 Log 日志
  5. 阿里OSS图片存储java代码示例
  6. Bootstrap css3
  7. 如何处理APF框架的错误消息:Filter is too complex error
  8. 概率论 一维随机变量
  9. OpenCV与图像处理学习五——图像滤波与增强:线性、非线性滤波、直方图均衡化与Gamma变换
  10. python3中map的用法_python3中map()函数用法
  11. i 智慧 | IBM存储:全面贯彻新存储的“智慧之道”
  12. 临床外显子组测序分析中的那些坑(上)
  13. python支持函数式编程吗_利用Fn.py库在Python中进行函数式编程
  14. 一文读懂卷积神经网络(转载)
  15. 如何在FL Studio中对整首歌曲音量进行调整
  16. 使用rsync 实现服务器文件同步
  17. 人脸识别mtcnn原理
  18. python实现whois查询_Python 工具whois查询
  19. 机器人操作臂运动学入门一--D-H参数标定
  20. MSSqlserver的锁模式介绍

热门文章

  1. Linux下makefile教程
  2. 微信公众平台开发之微网站
  3. 微信jssdk签名java_JAVA生成微信JSSDK接口签名
  4. 页面上下滚动,背景图不动
  5. 一一二、react Hooks 父组件调用子组件方法
  6. Python—②Python基础
  7. Light-Head R-CNN : 旷世提出用于加速two-stage detector的通用结构,速度达102fps
  8. Oracle java官网关于可重入读写锁ReentrantReadWriteLock的解析
  9. java万能盒子_JAVA编程——我们为什么要用Redis
  10. 接口可以继承接口吗,抽象类可以继承接口吗,抽象类可以继承实体类吗?