Selenium Grid简介
Selenium Grid实际上是基于Selenium RC的,而所谓的分散式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册资讯和状态资讯,并且接受远端客户端程式码的请求呼叫,然后把请求的命令转发给代理节点来执行(官方说明)简单来说通过selenium grid可以实现一台服务器控制多台node节点机器远端执行selenium自动化测试指令码。比如自动化测试指令码存放在一台hub主机上,那么通过grid就可以控制多台node客户端来执行hub主机上的自动化测试指令码,下面我们就开始配置一下分散式测试执行环境
环境准备
其实hub主机和node节点可以同时配置在一台物理机上,但是为了模拟真实的测试环境,我准备了2台真实的物理机,当然你也可以使用一台物理机+虚拟机器的方式练习
1. 准备2台处于同一个局域网下的物理机,保证2台物理机能够相互ping通
2.下载selenium-server-standalone包
3.作为node节点的物理机需要配置好浏览器和对应驱动,并把驱动程式加入环境变数
4.hub主机和node主机均需要配置java jdk 1.8 (切记本版,否则可能配置不成功)
问题
如果你的两台机器处于同一个网络,但是无法相互ping通,你可以尝试下面的办法解决
开启控制面板-开启防火墙设定-点选【高阶设定】-点选【入站规则】找到下面两个规则并开启

下载selenium-server-standalone
访问官网 https://www.seleniumhq.org/download/ 下载 selenium-server-standalone

下载好selenium-server-standalone-3.141.59.jar包后,分别放到两台电脑的任意位置
配置浏览器驱动
浏览器驱动如何配置,请自行百度(Google的驱动可以从这里下载https://npm.taobao.org/mirrors/chromedriver),我后面主要使用的是firefox浏览器
安装JDk
https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-setup.html 我的这篇文章里面有安装jdk的教程,但是请注意jdk的版本
搭建环境
配置hub主机
我选择作为hub主机的地址为:192.168.1.103
开启cmd终端,并切换到selenium-server-standalone-3.141.59.jar所在的目录下,执行命令:java -jar selenium-server-standalone-3.141.59.jar -role hub

执行命令后,会初始化本机为hub服务器,自动分配一个ip地址(如图,这个地址是个虚拟地址,作为hub的主机地址,因为同一台机器可以同时作为hub和note,所以会自动生成一个虚拟地址),埠号预设为4444,当然你在初始化hub主机的时候也可以修改预设埠,新增-port=指定埠号即可
初始化完成后,我们可以访问http://192.168.24.1:4444:/grid/console来检视初始化的hub状态如图

配置node节点
我选择的node节点机器的地址为:192.168.1.102
同样开启cmd终端,并切换到selenium-server-standalone-3.141.59.jar所在的目录下,执行命令:
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -browser "browserName=firefox,platform=WINDOWS" -hubHost 192.168.1.103(hub所在的主机地址)
如果你使用的浏览器是chrome,可能你需要执行这个命令(别问我为什么,我使用chrome浏览器的时候,使用上面的命令,只是修改了browserName=chrome,没有成功)
java -jar -Dwedriver.chrome.driver=driver所在的目录chromedriver.exe selenium-server-standalone-3.141.59.jar -browser "browserName=chrome, version=75" -role node -hubHost 192.168.1.103
命令执行完毕后你会看到下面的输出资讯

ok,现在我们再次访问一下hub主机的地址看下状态

右边就是我初始化成功后的远端node节点机器的配置,左边我也配置了一个,是在hub所在的主机配置的一个note节点
到这里,我们的分散式自动化测试环境就配置完成了,接下来开始编写我们的测试程式码,看下是否能够在远端note机器上执行测试
测试指令码
测试指令码放在hub所在的机器(我们的目的就是控制远端note机器执行测试(开启浏览器执行测试),并不是hub所在机器执行(要不然还有啥意义呢?))
"""
------------------------------------
@Time : 2019/7/6 16:55
@Auth : linux超
@File : testCaseNodeB.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ : [email protected]
@GROUP: 878565760
------------------------------------
"""
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class TestSeleniumGrid(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Remote(command_executor="http://192.168.1.102:16891/wd/hub",
desired_capabilities={"browserName": "firefox", # 浏览器名称
"platform": "WINDOWS"
})
def test_grid(self):
self.driver.get("https://www.baidu.com")
self.driver.find_element_by_id(\'kw\').send_keys(\'linux超\')
self.driver.find_element_by_id(\'su\').click()
WebDriverWait(self.driver, 10).
until(EC.visibility_of_element_located((By.XPATH, \'//a[text()="https://www.cnblogs.com/"]\')))
page_source = self.driver.page_source
self.assertIn(\'linux\', page_source)
def tearDown(self):
self.driver.quit()
if __name__ == \'__main__\':
unittest.main()
执行过程
我们执行hub主机上的程式码然后看一下note节点机器上执行的过程, 并注意看hub主机和note点选机器cmd终端的输出结果

执行过程中有一些警告资讯,也不知道什么原因,我还没找到解决的办法,但是并不影响测试的执行,到此为止整个测试环境搭建就完成了
最后
搭建过程需要注意
1.浏览器和浏览器驱动版本要匹配,且新增到系统环境变数
2.初始化hub和node时的命令不要敲错,算这次我一共搭过2次环境, 之前2次折腾命令引数就折腾了好久(对一个引数选项不太理解)
3.不要被hub和node机器的ip搞晕,指令码中的要在哪里执行测试就要配置哪个node节点机器的地址 (command_executor="http://192.168.1.102:16891/wd/hub",而且要主要后面接的/wd/hub是固定的不要写错)
需要注意的差不多就这么多吧, 自己不手动配置一遍你也不会知道究竟会遇到什么问题
出处: 部落格园Linux超的技术部落格--https://www.cnblogs.com/linuxchao/





























