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

长孙瑞
2023-12-01

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-20220208
    shm_size: 2gb
    depends_on:
      - selenium-hub
    ports:
      - "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=10
  edge:
    image: selenium/node-edge:4.1.2-20220208
    shm_size: 2gb
    depends_on:
      - selenium-hub
    ports:
      - "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=5
  firefox:
    image: selenium/node-firefox:4.1.2-20220208
    shm_size: 2gb
    depends_on:
      - selenium-hub
    ports:
      - "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=8
  selenium-hub:
    image: selenium/hub:4.1.2-20220208
    container_name: selenium-hub
    ports:
      - "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

 类似资料: