background image

07 Apr 2021

Selenium Grid 4 體驗

最近在處理系統交接並且升級相關的系統發現了Selenium Grid出了第四版現正Beta時讓我躍躍欲試, 以前Selenium Grid 3.x版本的時候UI說真的不怎麼樣,做了Selenium Grid 4的時候樣式跟整個畫面的設計全改了。 整個畫面看起來舒服了不少,但相關的東西也改了不少讓我一開始做測試的時候跌了不少次

selenium 4
selenium 4

Selenium 架構變更

Selenium Component文件中就給了一張架構圖, 跟過去只有HUB跟Node的架構有所差距,在整個部署與調整上擁有了更多彈性。你可以將HUB分散在多台的Server做部署, 或是你可以使用經典模式的HUB將這些分散的服務集中在HUB中。

新增的component有以下幾個,或者是你可以使用Hub來取代這些新的component

  • Router
  • Distributor
  • Session Map
  • New Session Queuer
  • Event Bus

Selenium Node Session的改變

在以前Selenium 3.x的時候,我們可以去使用MAX_SESSIONS指定該instance的Session數量,所以在自動化測試的機器叢集中我都直接給10個讓每一個node都具有10個session, 但這一次改版後即便你加了SE_NODE_MAX_SESSIONS的數量,但你的CPU數量不足時也無法產生更多的Session,新版本Node的Session數量取決於你設定的最大Session與CPU最小的那一個 在官方的github中這一段說明沒仔細看還真的很容易就給他忽略過去

Dynamic Grid的使用

在新版本的Selenium Grid支援了Dynamic Grid,可以在每一次測試的時候才產生相對應的目標瀏覽器,而不用預先建置好這些瀏覽器的session

在公司的Selenium的測試從集中,都採用docker的方式啟動這個對我來說可以減少在infrastructure的設定與管理

以下分享我的設定,在config.toml的部分讓docker-node可以使用host的docker花了一下功夫

1# config.toml
2
3[docker]
4# Configs have a mapping between the Docker image to use and the capabilities that need to be matched to
5# start a container with the given image.
6configs = [
7    "selenium/standalone-firefox:4.0.0-beta-3-prerelease-20210402", "{\"browserName\": \"firefox\"}",
8    "selenium/standalone-chrome:4.0.0-beta-3-prerelease-20210402", "{\"browserName\": \"chrome\"}",
9    "selenium/standalone-opera:4.0.0-beta-3-prerelease-20210402", "{\"browserName\": \"operablink\"}",
10    "selenium/standalone-edge:4.0.0-beta-3-prerelease-20210402", "{\"browserName\": \"msedge\"}"
11    ]
12
13# URL for connecting to the docker daemon
14# host.docker.internal works for macOS and Windows.
15# Linux could use --net=host in the `docker run` instruction or 172.17.0.1 in the URI below.
16# To have Docker listening through tcp on macOS, install socat and run the following command
17# socat -4 TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sock
18url = "unix:///var/run/docker.sock"
19# Docker imagee used for video recording
20video-image = "selenium/video:ffmpeg-4.3.1-20210402"
21
22# Uncomment the following section if you are running the node on a separate VM
23# Fill out the placeholders with appropriate values
24#[server]
25#host = <ip-from-node-machine>
26#port = <port-from-node-machine>
27
28[selenium official github](https://github.com/SeleniumHQ/docker-selenium#dynamic-grid-)
29
1version: "3"
2services:
3  node-docker:
4    image: selenium/node-docker:4.0.0-beta-3-prerelease-20210402
5    user: root
6    volumes:
7      - /var/run/docker.sock:/var/run/docker.sock
8      - ./config.toml:/opt/bin/config.toml
9    depends_on:
10      - hub
11    environment:
12      - SE_EVENT_BUS_HOST=hub
13      - SE_EVENT_BUS_PUBLISH_PORT=4442
14      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
15      - SE_NODE_OVERRIDE_MAX_SESSIONS=true
16      - SE_NODE_MAX_SESSIONS=10
17  hub:
18    image: selenium/hub:4.0.0-beta-3-prerelease-20210402
19    user: root
20    ports:
21      - "4442:4442"
22      - "4443:4443"
23      - "4444:4444"
24    logging:
25      options:
26        max-size: 100m
27        max-file: "1"
28    restart: always
29

參考連結

Selenium document

Max sessions

文章標籤