1、Selenium Grid组件专门用于远程分布式测试或者并发测试,通过并发执行测试用例的方式可以提高测试用例的只想念速度和效率,解决界面自动化测试执行速度过慢的问题;
2、Selenium Grid使用Hub和Node模式,一台计算机作为Hub管理其他多个Node计算机,Hub负责将测试用例分发给多台Node计算机执行,并收集多台Node计算机执行结果的报告,汇总后提交一份总的测试报告;
3、Selenium Grid注意事项:
Hub:
A、在分布式测试模式中,只能有一台作为Hub的计算机;
B、Hub负责管理测试脚本,并负责发送脚本给其他Node节点;
C、所有的Node节点计算机必须先在作为Hub的计算机中进行注册,注册成功后再和Hub计算机通信,Node节点计算机会告知Hub自己的相关信息,例如,Node节点的操作系统和浏览器相关版本;
E、Hub计算机也可以给自己分配执行测试用例的任务;
F、Hub计算机分发的测试用例任务会在各个Node计算机节点执行;
Node:
A、在分布式测试模式中,可以有一个或者多个Node节点;
B、Node节点会打开本地的浏览器完成测试任务并返回测试结果给Hub;
C、Node节点的操作系统和浏览器版本无须和Hub保持一致;
D、在Node节点上可以同时打开多个浏览器并执行测试任务;
4、分布式自动化环境准备:
A、下载JDK1.8安装文件;
B、安装JDK与配置环境变量;
5、远程调用Firefox浏览器进行自动化测试:
具体操作步骤:
A、找到两台Windows系统的计算机A和B,A作为Hub,B作为Node;
B、两台计算机均访问http://www.seleniumhq.org/download/,并单击页面中的下载链接selenium-server-standalone-x.xx.x.jar,并保存在两台计算机C盘根目录中;
C、在机器A上打开CMD窗口,将当前工作目录切换到C盘根目录,即selenium-server-standalone-x.xx.x.jar文件所在的目录,然后执行如下语句:
java -jar selenium -server -standalone-3.0.1.jar -role hub
参数-role hub:启动一个Hub服务,作为分布式管理中心,等待Webdriver客户端进行注册和请求,默认接收注册的地址为http://localhost:4444/grid/register,默认端口号为4444;
D、在机器A(192.168.1.107)中的Firefox浏览器地址栏中访问http://localhost:4444/grid/console,如果访问网页中出现“view config”的链接,表示Hub已经成功启动;默认情况下Selenium Grid使用4444作为服务端口号。在机器B也可以访问此网址,只需将localhost换成A机器的IP地址即可;
E、在机器B(192.168.1.113)中打开CMD窗口,并将当前工作目录切换到C盘根目录输入如下命令:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.1.107:4444/grid/rigister-Dwebdriver.firefox.driver="C:\geckodriver.exe" -port 6655 -maxSession 5 -browser browserName="firefox", maxInstances=5
F、在B中再次访问http://192.168.1.107:4444/grid/console,验证节点是否已经在Hub上注册成功;
G、编写分布式执行脚本如下:
# coding = utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver=webdriver.Remote(
# 设定Node节点的URL地址,后续将通过访问这个地址链接到Node计算机
command_executor='http://192.168.1.113:6655/wd/hub',
desired_capabilities={
# 指定远程计算机执行时使用的浏览器为Firefox
"browserName": "firefox",
"video": "True",
"platform": "WINDOWS"
}
)
print ("video:"+"http://www.baidu.com"+driver.session_id)
try:
driver.implicitly_wait(20)
driver.maximize_window()
driver.get("http://www.sogou.com")
assert u"搜狗" in driver.title
elem = driver.find_element_by_id("query")
elem.send_keys(u"Webdriver实战宝典")
elem.send_keys(Keys.RETURN)
time.sleep(2)
finally:
driver.quit()
6、远程调用IE浏览器进行自动化测试
具体操作步骤:
A、找到两台Windows系统的计算机A和B,A作为Hub,B作为Node;
B、两台计算机均访问http://www.seleniumhq.org/download/,并单击页面中的下载链接selenium-server-standalone-x.xx.x.jar,并保存在两台计算机C盘根目录中;
C、在机器A上打开CMD窗口,将当前工作目录切换到C盘根目录,即selenium-server-standalone-x.xx.x.jar文件所在的目录,然后执行如下语句:
java -jar selenium -server -standalone-3.0.1.jar -role hub
参数-role hub:启动一个Hub服务,作为分布式管理中心,等待Webdriver客户端进行注册和请求,默认接收注册的地址为http://localhost:4444/grid/register,默认端口号为4444;
D、在机器A(192.168.1.107)中的IE浏览器地址栏中访问http://localhost:4444/grid/console,如果访问网页中出现“view config”的链接,表示Hub已经成功启动;默认情况下Selenium Grid使用4444作为服务端口号。在机器B也可以访问此网址,只需将localhost换成A机器的IP地址即可;
E、在机器B(192.168.1.113)中打开CMD窗口,并将当前工作目录切换到C盘根目录输入如下命令:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.1.107:4444/grid/rigister-Dwebdriver.ie.driver="C:\IEDriverServer.exe" -port 6655 -maxSession 5 -browser browserName="internet explorer", maxInstances=5
F、在B中再次访问http://192.168.1.107:4444/grid/console,验证节点是否已经在Hub上注册成功;
G、编写分布式执行脚本如下:
# coding = utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Remote( # 设定Node节点的URL地址,后续将通过访问这个地址链接到Node计算机 command_executor='http://192.168.1.113:6655/wd/hub', desired_capabilities={ # 指定远程计算机执行时使用的浏览器为internet explorer
"browserName": "internet explorer",
"video": "True", "platform": "WINDOWS" } ) print ("video:"+"http://www.baidu.com"+driver.session_id) try: driver.implicitly_wait(20) driver.maximize_window() driver.get("http://www.sogou.com") assert u"搜狗" in driver.title elem = driver.find_element_by_id("query") elem.send_keys(u"Webdriver实战宝典") elem.send_keys(Keys.RETURN) time.sleep(2) finally: driver.quit()
7、远程调用Chrome浏览器进行自动化测试:
具体操作步骤:
A、找到两台Windows系统的计算机A和B,A作为Hub,B作为Node;
B、两台计算机均访问http://www.seleniumhq.org/download/,并单击页面中的下载链接selenium-server-standalone-x.xx.x.jar,并保存在两台计算机C盘根目录中;
C、在机器A上打开CMD窗口,将当前工作目录切换到C盘根目录,即selenium-server-standalone-x.xx.x.jar文件所在的目录,然后执行如下语句:
java -jar selenium -server -standalone-3.0.1.jar -role hub
参数-role hub:启动一个Hub服务,作为分布式管理中心,等待Webdriver客户端进行注册和请求,默认接收注册的地址为http://localhost:4444/grid/register,默认端口号为4444;
D、在机器A(192.168.1.107)中的IE浏览器地址栏中访问http://localhost:4444/grid/console,如果访问网页中出现“view config”的链接,表示Hub已经成功启动;默认情况下Selenium Grid使用4444作为服务端口号。在机器B也可以访问此网址,只需将localhost换成A机器的IP地址即可;
E、在机器B(192.168.1.113)中打开CMD窗口,并将当前工作目录切换到C盘根目录输入如下命令:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.1.107:4444/grid/rigister-Dwebdriver.chrome.driver="C:\chromedriver.exe" -port 6655 -maxSession 5 -browser browserName="internet explorer", maxInstances=5
F、在B中再次访问http://192.168.1.107:4444/grid/console,验证节点是否已经在Hub上注册成功;
G、编写分布式执行脚本如下:
# coding = utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Remote( # 设定Node节点的URL地址,后续将通过访问这个地址链接到Node计算机 command_executor='http://192.168.1.113:6655/wd/hub', desired_capabilities={ # 指定远程计算机执行时使用的浏览器为Chrome
"browserName": "chrome",
"video": "True", "platform": "WINDOWS" } ) print ("video:"+"http://www.baidu.com"+driver.session_id) try: driver.implicitly_wait(20) driver.maximize_window() driver.get("http://www.sogou.com") assert u"搜狗" in driver.title elem = driver.find_element_by_id("query") elem.send_keys(u"Webdriver实战宝典") elem.send_keys(Keys.RETURN) time.sleep(2) finally: driver.quit()
8、同时支持多个浏览器进行自动化测试:
Selenium Grid支持同时将Node节点计算机上多个浏览器注册到Hub上,以便满足测试过程中不同浏览器需求;
A、在机器A上启动Hub,切换CMD当前工作目录到selenium-server-standalone-x.xx.x.jar文件所在的目录,然后执行如下命令:
java -jar selenium -server -standalone-3.0.1.jar -role hub
B、在B机器上进行Node注册,切换到selenium-server-standalone-x.xx.x.jar文件所在的目录执行如下命令:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.1.107:4444/grid/rigister-Dwebdriver.chrome.driver="C:\chromedriver.exe" - Dwebdriver.ie.driver="C:\IEDriverServer.exe" - Dwebdriver.firefox.driver="C:\geckodriver.exe" -port 6655 -maxSession 5 -browser browserName="internet explorer", maxInstances=5 -browser browserName="chrome", maxInstances=5 -browser browserName="firefox", maxInstances=5
测试脚本如下:
# coding = utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browsers=["firefox", "chrome", "internet explorer"]
driver=webdriver.Remote(
# 设定Node节点的URL地址,后续将通过访问这个地址链接到Node计算机
command_executor='http://192.168.1.113:6655/wd/hub',
desired_capabilities={
# 指定远程计算机执行时使用的浏览器为Firefox
"browserName":random.choice(browsers),
"platform": "WINDOWS"
}
)
try:
driver.implicitly_wait(20)
driver.maximize_window()
driver.get("http://www.sogou.com")
assert u"搜狗" in driver.title
elem = driver.find_element_by_id("query")
elem.send_keys(u"Webdriver实战宝典")
elem.send_keys(Keys.RETURN)
time.sleep(2)
finally:
driver.quit()
9、使用并发的分布式自动化测试:
Selenium Grid不仅支持在同一台机器上同时启动好几个浏览器并发跑测试用例,也支持同时在多台
不同的机器上启动不同的浏览器并发跑测试用例;
操作步骤:
A、在机器A、B和C的C盘根目录放入selenium-server-standalone-x.xx.x.jar文件;
B、在机器A中打开CMD,并将CMD当前工作目录切换到C盘根目录,然后执行如下命令:
java -jar selenium -server -standalone-3.0.1.jar -role hub
再重新打开一个CMD,将CMD当前目录切换到C盘根目录,然后执行命令:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.31.26:4444/grid/register - Dwebdriver.ie.driver="C:\IEDriverServer.exe" -port 6655 -maxSession 5 - browserName="internet exployer", maxInstance=5
C、在机器B中打开CMD,并将CMD当前工作目录切换到C盘根目录,然后执行如下命令启动机器B节点服务,并进行注册:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.31.26:4444/grid/register-Dwebdriver.firefox.driver="C:\geckodriver.exe" -port 6666 -maxSession 5 -browser browserName="firefox", platform="WINDOWS",maxInstances=5
D、在机器C中打开CMD,并将CMD当前工作目录切换到C盘根目录,然后执行如下命令启动机器B节点服务,并进行注册:
java -jar selenium -server -standalone-3.0.1.jar -role webdriver -hub http://192.168.31.26:4444/grid/register-Dwebdriver.chrome.driver="C:\chromedriver.exe" -port 6666 -maxSession 5 -browser browserName="firefox", platform="WINDOWS",maxInstances=5
E、注册的A、B、C机器节点的端口号必须不一致;
测试脚本如下: