selenium Grid使用Hub和Node模式,一台计算机作为Hub(管理中心)管理其他多个Node(节点)计算机。Hub负责将测试用例分发给多台Node计算机执行,并收集多台Node计算机执行结果的报告,汇总后提交一份总的测试报告。
selenium文档:https://www.selenium.dev/documentation/zh-cn/grid/grid_3/setting_up_your_own_grid/
Hub
在分布式测试模式中,只能有一台作为Hub的计算机。
Hub负责管理测试脚本, 并负责发送脚本给其他Node节点。
所有的Node节点计算机会在Hub计算机中先进行注册,注册成功后再和Hub计算机通信,Node节点计算机会告之Hub自己的相关信息。例如,Node节点的浏览器相关信息、最多并发数等。
Hub计算机可以给自己分配执行测试用例的任务。
Hub计算机分发的测试用例任务会在各个Node节点计算机执行。
Node
在分布式测试模式中,可以有一个或者多个Node节点。
Node节点会打开本地的浏览器完成测试任务并返回测试结果给Hub。
Node节点的操作系统和浏览器版本无需和Hub保持一致。
在Node节点上可以同时打开多个浏览器并行执行测试任务。
配置环境
- 运行selenium需要java环境,所以首先安装java的JDK,然后配置好java环境
- 下载 selenium-server-standalone.jar,地址https://selenium.dev/downloads/
- 打开命令行窗口,来到存放selenium-server-standalone.jar文件的地方。 在终端启动服务:
java -jar selenium-server-standalone.jar -role hub
转发器(hub)默认会监听4444端口,你也可以通过打开浏览器访问http://localhost:4444/grid/console来查看转发器(hub)的状态。
如果需要改变默认端口,你可以添加-port加上一个数字作为参数来代表你期望监听的端口, 同时,所有其他的可选参数都可以在下面这个JSON配置文件里找到。
方便起见,你也可以指定一个JSON格式的配置文件来配置并启动你的转发器(hub)。 你可以这么做:
java -jar selenium-server-standalone.jar -role hub -hubConfig hubConfig.json -debug
4.启动节点
java -jar selenium-server-standalone.jar -role node -hub http://localhost:4444
通过在命令行中设置JVM属性(在-jar参数前使用-D参数),会被传递到节点里: -Dwebdriver.chrome.driver=chromedriver.exe
也可以使用JSON配置文件来启动服务网格节点
java -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone.jar -role node -nodeConfig node1Config.json
JSON文件如下:
{
"capabilities": [
{
"browserName": "firefox",
"acceptSslCerts": true,
"javascriptEnabled": true,
"takesScreenshot": false,
"firefox_profile": "",
"browser-version": "27",
"platform": "WINDOWS",
"maxInstances": 5,
"firefox_binary": "",
"cleanSession": true
},
{
"browserName": "chrome",
"maxInstances": 5,
"platform": "WINDOWS",
"webdriver.chrome.driver": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
},
{
"browserName": "internet explorer",
"maxInstances": 1,
"platform": "WINDOWS",
"webdriver.ie.driver": "C:/Program Files (x86)/Internet Explorer/iexplore.exe"
}
],
"configuration": {
"_comment" : "Configuration for Node",
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.WebDriverRemoteProxy",
"port": 5555,
"host": ip,
"register": true,
"hubPort": 4444,
"maxSession": 5
}
}
在webdriver.io中集成selenium
除了webdriver.io的常规配置外,在webdriver.io的配置文件中添加以下内容:
protocol: 'https',//默认为http
hostname: 'selenium-hub.com',//你的selenium hub地址
path:'/wd/hub',//默认值/wd/hub
capabilities: [{ //node节点配置了什么浏览器,以及自己需要在什么浏览器上测试,就在该数组中配置即可
browserName: 'chrome',
port: 443 //由于我们的selenium hub是用的https来完成的,且并未配置端口号,所以此处使用的是https的端口443
}, {
browserName: 'firefox',
port: 443
}]
注:并不需要安装额外的包,例如selenium-standalone-service之类的,hub和node节点配置好之后,直接使用即可