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...

三、查看截图

相关文章
相关标签/搜索