目的:本地编写测试代码,运行时,在远程主机运行

本地环境:win10

远程主机:CentOS Linux release 7.2.1511 (Core)

[root@node129 /]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)

 

docker环境准备

第一步:

检查是否安装 :yum list installed | grep docker

安装命令:yum install -y docker

 

删除命令: [root@localhost ~]# yum remove –y docker.x86_64

[root@localhost ~]# yum remove –y docker-client.x86_64

[root@localhost ~]# yum remove –y docker-common.x86_64

 第二步:

修改镜像文件拉取地址为ustc ,提高镜像下载速度

vi /etc/docker/daemon.json

备注:insert 编辑内容如下      并esc  输入:wq 保存退出  

{

"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]

}

[root@node129 /]# cat /etc/docker/daemon.json
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}

第三步:重启docker   重新进行step1 安装速度变快

systemctl restart docker

查看状态 docker

 

 

测试准备

 

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 的端口到内部容器开放的网络端口。
  • 说明实例:docker run -p 5555:4444 -d --name hub selenium/hub
    •   run 是让我们运行一个镜像,创建出一个容器。
      运行的镜像名字叫做selenium/hub
      -p 5555:4444 这个是把容器里的端口映射出来,让别人可以访问。
      -d 在后台运行
      --name 给这个容器起一个容易明白的名字,这里我就直接把这个容器成为hub。

5、启动分支node chrome 容器

$ sudo docker run -d --link selenium-hub:hub selenium/node-chrome
  • --link 通过 link 关联 selenium-hub 容器,并为其设置了别名hub
  • 也可以加上-name 为容器命名,不加自动生成
  • [root@node129 ~]# docker run -d -p 5904:5900 --name chrome4 --link selenium-hub:hub selenium/node-chrome-debug
    6bc9182b0e441b7946867def84ca1c7c81fdc6c971632575c3f7a4e0ecb21f77
    [root@node129 ~]# docker ps -a
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                      PORTS                     NAMES
    6bc9182b0e44        selenium/node-chrome-debug    "/opt/bin/entry_po..."   2 seconds ago       Up 1 second                 0.0.0.0:5904->5900/tcp    chrome4

     

6、查看容器

 

 

这里需要注意,Selenium/hub 容器的端口号为 4444,对外部映射的端口为 32768,前面通过 -P 参数自动分配。

浏览器访问如图,表示selenium服务正常连接

 

 

工作原理:

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

创建Grid测试脚本与运行

1、编写Selenium Grid 脚本(grid_demo.py)

如果脚本不在docker机器上,修改ip地址

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


posted on 2020-10-10 17:30  li7  阅读(563)  评论(0编辑  收藏  举报