python+selenium grid 分布式测试实践

一、工作原理: 

Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构有一个hub主节点和若干个node代理节点组成。hub用来管理各个子节点的注册和状态信息,并接收远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。使用Grid远程执行测试的代码与直接调用Selenium Server是一样的,只是环境启动的方式不一样,需要同时启动一个hub和至少一个node。

二、环境配置:

1.下载selenium server,地址:https://www.seleniumhq.org/ ;

python+selenium grid 分布式测试实践

2.由于运行jar需要有对应的java环境,所以提前需要有java环境,java环境配置详见:https://blog.****.net/weixin_37579123/article/details/83855873;根据jdk环境,选择对应版本的selenium-server-standalone-xxx.jar ;

三、实践步骤:

准备两台机器A和B,要求已经安装好环境;

1.将A机器作为hub中控机,进入到jar文件所在的目录下执行:java -jar selenium-server-standalone-3.141.59.jar -role hub

python+selenium grid 分布式测试实践

可以访问提示的网址来查看节点机,此时还没有节点连接!

python+selenium grid 分布式测试实践

2.将B机器作为节点机连接,进入到jar文件所在的目录下执行:(IP地址需要注意更改,输入A机器的启动地址)

java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub http://10.168.65.95:4444/grid/register-Dwebdriver.chrome.driver="d:\chromedriver.exe" -port 6666 -maxSession 5 -browser browserName="chrome",maxInstances=5

python+selenium grid 分布式测试实践

节点机注册成功后提示:The node is registered to the hub and ready to use

3.此时在A机器访问http://10.168.65.95:4444/grid/console ,可以查看到节点机的连接情况

python+selenium grid 分布式测试实践

4.在A机器上运行测试脚本,可以看到实际启动浏览器是在B机器上操作的;(注意:B机器上需要安装相应的浏览器驱动)

#encoding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Remote(
  # 设定Node节点的URL地址,后续将通过访问这个地址连接到Node计算机
  command_executor = 'http://10.168.200.54:6666/wd/hub',  # 要和节点机显示的ip地址一样
  desired_capabilities = {
        # 指定远程计算机执行使用的浏览器为chrome;或者internet explorer/firefox
        "browserName": "chrome",
        "video": "True",
        # 远程计算机的平台
        "platform": "WINDOWS"
  })

try:
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get("http://www.sogou.com")
    assert u"搜狗" in driver.title
    elem = driver.find_element_by_id("query")
    elem.send_keys("自动化测试")
    elem.send_keys(Keys.RETURN)
    time.sleep(3)
    assert "自动化" in driver.page_source
    print ('done!')
finally:
    driver.quit()

5.同时启动多个浏览器命令:

java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub
http://10.168.65.95:4444/grid/register-Dwebdriver.chrome.driver="d:\chromedriver.exe"-Dwebdriver.ie.driver="e:\IEDriverServer.exe"-Dwebdriver.firefox.driver="e:\geckodriver.exe" -port 6666 -maxSession 5 -browser browserName="internet explorer",maxInstances=5 -browser browserName="chrome",maxInstances=5 -browser browserName="firefox",maxInstance=5

同理,如果有需求,可以扩展节点机,增加节点机的连接数量,同时可修改测试脚本来实现多线程远程执行;