Docker Swarm Deploy Selenium grid分布式执行自动化UI测试

假设有主机1,2,3三台主机:

为Dokcer创建一个网络

// xxx 代表网络名称
docker network create --driver=overlay --attachable XXXXX 

$ docker network create --driver=overlay --attachable selenium

创建一个集群管理节点

docker swarm init --advertise-addr <manager-ip>
// 或者直接使用 docker swarm init

$ docker swarm init

Swarm initialized: current node (deyp099wnn94lgauxp9ljil83) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token  \
    SWMTKN-1-5rm2sib935txv5k13j6leaqsfuuttalktt7jv4s55249izjf54-8ia31tagc4sbehqeqiqst4jfz \
    172.30.0.170:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

其他两台主机执行加入集群中

$ docker swarm join --token \
  SWMTKN-1-5rm2sib935txv5k13j6leaqsfuuttalktt7jv4s55249izjf54-8ia31tagc4sbehqeqiqst4jfz \
  172.30.0.170:2377
  
This node joined a swarm as a worker.

执行完毕,可在主node节点执行docker info查看详情

$ docker info
...
Swarm: active
 NodeID: deyp099wnn94lgauxp9ljil83
 Is Manager: true
 ClusterID: ujst6yr4orqiyago1u277pppp
 Managers: 1
 Nodes: 3
...

如果一切正常,您将在输出中看到3,因为manager也认为是其中一个节点

 

Docker 拉取镜像

https://hub.docker.com/u/selenium/ 查看镜像是否存在

$ docker pull selenium/node-firefox-debug
$ docker pull selenium/node-chrome-debug
$ docker pull selenium/node-opera-debug

创建一个yaml文件 (以下使用了单个节点进行操作)

version: '3'
networks:
  default:
    external: 
        name: selenium
services:
  hub:
    image: selenium/hub
    ports:
        - 14444:4444
    deploy:
     mode: global
     placement:
       constraints:
       # manager 带表创建到 manange节点 也可时候用work节点
         - node.role == manager
    environment:
      GRID_NEW_SESSION_WAIT_TIMEOUT: 60000
    networks:
     - default
  firefoxdebug:
    image: selenium/node-firefox-debug
    depends_on:
      - hub
    environment:
       HUB_PORT_4444_TCP_ADDR: hub
       HUB_PORT_4444_TCP_PORT: 4444
       NODE_MAX_SESSION: 2
       NODE_MAX_INSTANCES: 2
    entrypoint: bash -c 'SE_OPTS="-host $$HOSTNAME -port 5556" /opt/bin/entry_point.sh'
    ports:
      - 5556:5555
    deploy:
      replicas: 1
    networks:
      - default
  chromedebug:
    image: selenium/node-chrome-debug
    depends_on:
      - hub
    environment:
       HUB_PORT_4444_TCP_ADDR: hub
       HUB_PORT_4444_TCP_PORT: 4444
       NODE_MAX_SESSION: 2
       NODE_MAX_INSTANCES: 2 
    entrypoint: bash -c 'SE_OPTS="-host $$HOSTNAME -port 5557" /opt/bin/entry_point.sh'
    ports:
      - 5557:5556
    deploy:
      replicas: 1
    networks:
      - default
  operadebug:
    image: selenium/node-opera-debug
    depends_on:
      - hub
    environment:
       HUB_PORT_4444_TCP_ADDR: hub
       HUB_PORT_4444_TCP_PORT: 4444
       NODE_MAX_SESSION: 2
       NODE_MAX_INSTANCES: 2
    entrypoint: bash -c 'SE_OPTS="-host $$HOSTNAME -port 6001" /opt/bin/entry_point.sh'
    ports:
      - 6001:6000
    deploy:
      replicas: 1
    networks:
      - default

集群部署

$ docker stack deploy -c selenium.yaml s
# $ docker stack deploy --compose-file selenium.yaml s
Creating service s_firefoxdebug
Creating service s_chromedebug
Creating service s_hub

查看部署的镜像

$ docker service ls
ID             NAME             MODE         REPLICAS   IMAGE                                      PORTS
k7fa5af392x1   s_chromedebug    replicated   1/1        selenium/node-chrome-debug:latest          *:5557->5900/tcp
vd5e6mx1p5zt   s_firefoxdebug   replicated   1/1        selenium/node-firefox-debug:latest         *:5556->5900/tcp
oxgdwo222bev   s_hub            global       1/1        selenium/hub:latest                        *:14444->4444/tcp
5ijmybzff738   s_operadebug     replicated   1/1        selenium/node-opera-debug:latest           *:6001->5900/tcp

 

$ docker stack ps s
ID             NAME                              IMAGE                                      NODE                      DESIRED STATE   CURRENT STATE           ERROR     PORTS
mfr3aqrejpt3   s_chromedebug.1                   selenium/node-chrome-debug:latest          izm5eczfpx31lofdqk3tnzz   Running         Running 8 minutes ago             
ug88h4fy3acy   s_firefoxdebug.1                  selenium/node-firefox-debug:latest         izm5eczfpx31lofdqk3tnzz   Running         Running 8 minutes ago             
u8psiaf41n8r   s_hub.0g1n1qm6yxmbbe1srpho90t54   selenium/hub:latest                        izm5eczfpx31lofdqk3tnzz   Running         Running 8 minutes ago             
e8kwk35kaxum   s_operadebug.1                    selenium/node-opera-debug:latest           izm5eczfpx31lofdqk3tnzz   Running         Running 8 minutes ago  

访问grid

http://127.0.0.1:14444/grid/console

image.png

删除

$ docker stack rm s
# 执行命令后节点全部被卸载,可重新使用deploy进行创建
Removing service s_chromedebug
Removing service s_firefoxdebug
Removing service s_hub
Removing service s_operadebug

 

VNC远程连接查看执行过程

 

📎VNC-Viewer-6.20.529-Windows.rar

 

安装完毕后,可通过ip+对外映射的端口号访问:

如:

192.168.1.1:5556

192.168.1.1:5557

192.168.1.1:5558

如下: 连接会提示需要密码,默认密码:secret

image.png

 

伸缩节点可使用scale

docker service scale s_chromedebug=2
selenium_chromedebug scaled to 2
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged 

效果如下:

image.png

Selenium WebDriver实例化方法

        URL hubUrl = new URL("http://127.0.0.1:14444/wd/hub");\
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setPageLoadStrategy(PageLoadStrategy.EAGER);
        chromeOptions.setAcceptInsecureCerts(true);
        chromeOptions.setCapability("platform", Platform.LINUX);
        WebDriver driver = new RemoteWebDriver(hubUrl, chromeOptions);

参考文章:

https://developer.ibm.com/zh/articles/os-cn-docker-selenium-grid-test/

https://tarunlalwani.com/post/deploy-selenium-grid-using-docker-swarm-aws/

https://dzone.com/articles/deploying-selenium-grid-using-docker

https://docs.docker.com/compose/compose-file/

https://blog.csdn.net/epubit17/article/details/107970931

https://www.cnblogs.com/nullnullnull/p/11592547.html

docker镜像

https://hub.docker.com/u/selenium/

posted @   小强找BUG  阅读(947)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示