seleniumhq官方项目:https://github.com/seleniumhq/docker-selenium 项目目前快速迭代中。
selenium
这里主要针对的是 selenium grid,它用于分布式自动化测试,就是一套selenium 代码可在不同的环境上运行。刚好,docker可快速的创建各种环境。
selenium grid 有两个概念
hub :主节点,你可以看作 “北京总公司的测试经理”。
node:分支节点,你可以看作 “北京总公司的测试小兵a” 和 “上海分公司的测试小兵b”,还有 “深圳分公司的测试小兵c” …。
也就是说在selenium grid中只能有一个主hub,但可以在本地或远程建立 n 多个分支node,测试脚本指向主hub,由主hub 分配给本地/远程node 运行测试用例。
docker selenium 环境安装
以ubuntu为例,在ubuntu下安装docker,请参考:docker安装(ubuntu)
docker hub(仓库):
https://hub.docker.com/r/selenium/hub/
1、下载主hub镜像(北京总公司的测试经理)
$ sudo docker pull selenium/hub
2、下载主node chrome 镜像(上海分公司的测试小兵b)
$ sudo docker pull selenium/node-chrome
3、查看镜像
$ 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
4、启动主hub容器
$ sudo docker run -d -p --name selenium-hub selenium/hub
- -d 表示容器以守护态(daemonized)形式运行。
- -p 表示 docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
5、启动分支node chrome 容器
$ sudo docker run -d --link selenium-hub:hub selenium/node-chrome
- –link 通过 link 关联
selenium-hub
容器,并为其设置了别名hub
6、查看容器
$ 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测试脚本与运行
1、编写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会报错。
另外,我们为了验证脚本是否真的执行加上了打印和截图。
2、运行脚本
$ python3 grid_demo.py
get baidu
end...
百度页面是被渲染出来了,但中文有乱码。