一、Docker和虚拟机的区别
- Docker没有虚拟化出操作系统的内核,直接使用宿主机的内核
- Docker行为完全依赖于宿主机的内核
- Docker不支持IE浏览器,因为它使用的是linux系统
- 使用Docker不能做系统的兼容性测试,因为Docker完全依赖于宿主机操作系统
Docker只能做Linux能做的事情,Linux不能做的事情Docker一定做不了。
搭建Selenium Grid
- 分布式UI自动化测试解决方案
- 用于并发测试的场景,使用分布式进行测试,将任务拆分成不同的单元进行并发测试
- 参考网址:https://www.jianshu.com/p/a61e8fc42fe3
- docker-selenium网址:https://github.com/SeleniumHQ/docker-selenium
二、搭建Selenium Grid
- 搭建hub
-
docker run --name=hub -p 5001:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium
image.png
- 创建节点node
-
docker run --name=chrome -p 5902:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium
- NODE_MAX_INSTANCES 和 NODE_MAX_SESSION 要设置为相同的个数,决定了能够并行的node节点数即浏览器数。需要根据当前机器的性能来设置。
- 如果想增加node节点,可以修改
--name
和端口再次执行上面的命令
image.png
VNC密码是:
secret
此时hub和node在同一台机器上部署的。如果是另一台机器连接到此机器的hub上,即在不同的机器上时就不能使用
--link
。下面将如何
“--link”原理以如何连接另一台机器的node
进入到chrome节点下,
docker exec -it chrome bash
-
查看chrome节点下的有关hub的环境变量:
env | grep HUB
image.png --link
其实是将hub的容器网络信息以环境变量的方式注入到node节点上,node只需要读取环境变量,以发出网络请求的方式连接hub即可。所以--link
原理就是环境变量的注入。其他机器的node连接hub需要在命令中加入:
-e HUB_PORT_4444_TCP_ADDR=xxxx -e HUB_PORT_4444_TCP=xxxx
来指定hub的端口地址
端口映射
- 容器的ip地址是随机的,是随着docker启动自动生成的
- 同一台机器不需要端口映射,即
容器A
与容器B
之间只需要知道对方的ip地址即可访问。但是基于上一条,容器的ip地址是随机的,所以需要使用--link
来进行容器间的访问,当容器B
使用命令--link [容器A]
时,就会把容器A
的地址和端口号注入到容器B
的环境变量中。 - 容器的ip是虚拟出来的,没在路由表中,需要将宿主机当做跳板进行访问,即访问宿主机的某个端口来访问容器
- 不同机器上的容器要实现通信,必须通过宿主机与另一台宿主机的容器进行端口映射才能通信。图中
容器C
与容器A
实现通信,要么容器C
与宿主机1
进行端口映射,要么容器A
与宿主机2
进行端口映射。
image.png
端口映射用来暴露网络,环境变量用来传参。
三、进行自动化测试
- 脚本中要加上 hub 节点的地址
- 具体可参考https://www.jianshu.com/p/a61e8fc42fe3
四、搭建Prometheus及Grafana
image.png
搭建MySQL
docker run --name some-mysql -v /home/insane/test/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306 -d mysql:5.5
docker run -d --name test_sleep_infinity --link some-mysql centos sleep infinity
- 进入mysql容器:
docker exec -it some-mysql bash
- 进入mysql:
mysql -u root -p
,输入密码即可
image.png - 退出mysql:
\q