Selenium Grid是什么?
Selenium Grid是Selenium套件的一部分,它专门用于在不同的浏览器、操作系统和机器上并行运行多个测试。
Selenium Grid有两个版本——旧的Grid1和新的Grid2。我们只关注Grid2,因为Grid 1逐渐被Selenium团队所弃用。
Selenium Grid使用了一个hub节点的概念,在这个概念中,您只在一个名为hub的机器上运行测试,但是执行将由不同的称为Node(就是节点)的机器来执行。
什么时候使用Selenium Grid?
当您想要执行以下操作时,您应该使用Selenium Grid:
在不同的浏览器、操作系统和机器上运行您的测试。这将确保您测试系统兼容性的环境的完全覆盖。
在测试套件的执行中节省时间。如果您设置了Selenium Grid,每次运行4个测试,那么您将能够以快4倍的速度完成整个套件。有利于更快的发现错误。
Selenium Grid体系结构
The Hub
hub是您将测试加载到其中的中心点。在部署的Grid中应该只有一个中心。
该中心仅在一台计算机上启动,例如一台计算机。S是Windows 7,它的浏览器是IE。包含Hub的机器是测试运行的地方,但是您将看到浏览器在Node上是自动的。
The Node
Node是将执行您在中心上加载的测试的Selenium实例。
Grid中可以有一个或多个Node。
可以在具有不同平台和浏览器的多台机器上启动Node。
运行Node的机器不需要与Hub相同的平台。
如何设置Selenium Grid?
先从一个简单的例子开始,您将使用2台机器。第一个机器将是运行该Hub的系统,而另一台机器将运行一个Node。为简单起见,让我们将Hub运行的机器称为“机器A”,而Node运行的机器将是“机器b”。同样重要的是要注意他们的IP地址。
假设机器A具有192.168.1.3的IP地址,而机器B的IP地址为192.168.1.4。
下载Selenium Server by here.
放置Selenium Server
jar文件下载后可以放在您的硬盘中任何地方。但是为了方便,都将它放在机器A和机器B的C驱动器上,完成之后,您就完成了安装Selenium Grid的工作。以下步骤将启动该Hub和Node。启动Selenium Server
我们现在要启动一个Hub。使用命令提示符,导航到机器A的C驱动器的根目录,因为这是我们放置Selenium服务器的目录。
在命令提示符中,键入:
$java -jar selenium-server-standalone-2.53.1.jar -role hub
成功启动后,您的命令提示符应该与下面的图像类似:
如果出现以下错误,则表示你的端口被占用了,可以用以下命令进行修改:
$java -jar selenium-server-standalone-2.53.1.jar -role hub -port 5666(选取一个没有被占用的端口)
4.验证Hub是否正在运行
打开浏览器。在默认情况下,Selenium Grid使用机器A端口4444作为其web接口。打开一个浏览器,访问http://localhost:4444/grid/
5 .设置好Hub后,启动一个Node。
在机器B的C盘根目录下输入以下命令:
提示符。
$java -D webdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-2.53.1.jar -role node -hub http://192.168.1.3:4444/grid/register -port 5566
上面那个命令参数的含义如下:
-D 指调用的驱动指定的路径。
-jar 指需要使用的Jar包
-role 指此台机器的角色,是Hub还是Node
-hub 指明Hub机器的地址
-port 指明通信的端口号,可以选择您想要的任何免费的端口号。
链接成功后,在Node机器B上可能出现如下画面:
在Hub 机器A上出现以下的画面:
如果有多个Node链接的情况下,console上会出现多个节点的情况。
设计可以在Grid上运行的测试脚本
要设计将在Grid上运行的测试脚本,我们需要使用DesiredCapabilites和RemoteWebDriver对象。
- DesiredCapabilites 是用来设置需要被测试的系统和浏览器的类型
- RemoteWebDriver用于设置我们的测试将运行的哪个节点(或机器)。
要使用这两个对象,您必须首先导入这个两个包:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
使用DesiredCapabilites对象
转到Grid的web界面,并在您想要自动化的浏览器的图像上停留。注意这个平台,浏览器名称显示在工具提示中。
我们将在WebDriver中使用这个平台(VISTA)和browserName(firefox),如下所示(当然,您首先需要导入必要的包)。
#指定运行主机与端口号
driver = webdriver.Remote(
command_executor='http://机器B的ip:机器B的端口号/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX)
运行一个简单的例子在Node机器B上
可以写一个最简单的百度搜索的例子。
import time
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
#指定运行主机与端口号
driver = webdriver.Remote(
command_executor='http://192.168.199.156:5566/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX)
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("hello")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.close()
以上代码在Hub的机器A上运行后,可以在机器B上看到Firefox浏览器被打开,加载入百度搜索页面,输入关键词hello并搜索。
总结
Selenium Grid用于在不同的浏览器和平台上同时运行多个测试。
Grid使用了hub-node概念。
hub是您加载测试的中心点。node是将执行您在中心上加载的测试的Selenium实例。
要安装Selenium Grid,只需下载Selenium server jar文件来运行Selenium RC测试中使用的相同文件。
有两种方法来验证这个中心是否正在运行:一个是通过命令提示符,另一个是通过浏览器
要在Grid上运行测试脚本,您应该使用DesiredCapabilities 和RemoteWebDriver对象。
扩展:
如果你想在不同的系统和浏览器上启动的话,可以更改DesiredCapabilities 的设置,比如:
#浏览器数组
lists=['chrome','internet explorer','firefox']
#通过不同的浏览器执行脚本
for browser in lists:
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities={'platform': 'ANY',
'browserName':browser,
'version': '',
'javascriptEnabled': True
})
在脚本的执行中我们就可以看到,第一次是启动chrome来执行,第二次是IE浏览器,第三次是firefox。
当然前提是你执行的机器上所有浏览器的驱动都安装到位且可以执行Selenium的自动化。
引用:
官方介绍文档:https://github.com/SeleniumHQ/selenium/wiki/Grid2