linux + docker + selenium grid 實現分佈式執行selenium腳本

Selenium Grid 有兩個概念node

hub :主節點,你能夠看做 「北京總公司的測試經理」。python

node:分支節點,你能夠看做 「北京總公司的測試小兵A」 和 「上海分公司的測試小兵B」,還有 「深圳分公司的測試小兵C」 …。web

也就是說在Selenium Grid中只能有一個主hub,但能夠在本地或遠程創建 N 多個分支node,測試腳本指向主hub,由主hub 分配給本地/遠程node 運行測試用例。chrome

docker selenium 環境安裝docker

docker hub(倉庫):ubuntu

https://hub.docker.com/u/selenium/瀏覽器

一、下載主hub鏡像(北京總公司的測試經理)網絡

$ sudo docker pull selenium/hub

二、下載主node chrome 鏡像(上海分公司的測試小兵B)tcp

$ sudo docker pull selenium/node-chrome

三、查看鏡像測試

$  sudo docker images

REPOSITORY            TAG       IMAGE ID         CREATED       SIZE
selenium/node-chrome  latest    1eba57bd3d79     12 days ago   823MB
selenium/hub          latest    d1437f7d9f87     12 days ago   285MB

四、啓動主hub容器

$ sudo docker run -d -P --name selenium-hub selenium/hub

-d 表示容器以守護態(Daemonized)形式運行。
-P 表示 Docker 會隨機映射一個 49000~49900 的端口到內部容器開放的網絡端口。

五、啓動分支node chrome 容器

$ sudo docker run -d --link selenium-hub:hub selenium/node-chrome
–link 經過 link 關聯 selenium-hub 容器,併爲其設置了別名hub

六、查看容器

$ sudo docker images
CONTAINER ID     IMAGE                  COMMAND                  CREATED        STATUS        PORTS                     NAMES
9cd0dac69875     selenium/hub           "/opt/bin/entry_poin…"   12 hours ago   Up 12 hours   0.0.0.0:32768->4444/tcp   selenium-hub
18d139a6c36d     selenium/node-chrome   "/opt/bin/entry_poin…"   12 hours ago   Up 12 hours                             eloquent_gates
這裏須要注意,Selenium/hub 容器的端口號爲 4444,對Ubuntu映射的端口爲 32768,前面經過 -P 參數自動分配。

工做原理:

selenium Grid腳本 -> ubuntu(32768) -> Hub容器(4444) -> Node Chrome 容器

建立Grid測試腳本與運行

一、編寫Selenium Grid 腳本(grid_demo.py)

from selenium import webdriver
from time import sleep

driver = webdriver.Remote(
command_executor='http://127.0.0.1:32768/wd/hub',
desired_capabilities={'browserName': 'chrome'}
)

driver.get('https://www.baidu.com')
print("get baidu")

driver.find_element_by_id("kw").send_keys("docker selenium")
driver.find_element_by_id("su").click()

sleep(1)

driver.get_screenshot_as_file("/home/fnngj/mypro/baidu_img.png")

driver.quit()
print("end...")

注意訪問的端口號和瀏覽器,由於咱們只啓動了node chrome容器,若是這裏設置Friefox的話,須要你啓動 node firefox 容器,hub找不到合適的node會報錯。

另外,咱們爲了驗證腳本是否真的執行加上了打印和截圖。

二、運行腳本

$ python3 grid_demo.py

get baidu

end...

三、查看截圖

相關文章
相關標籤/搜索