一、预置条件
0.Finalshell或者xshell远程连接及操作Linux系统的优秀工具,本人推荐Finalshell
链接:https://pan.baidu.com/s/1V8WEfCQsb24rnoeLMtfCMA
提取码:on5o
1.在linux服务器上,需要java环境、python3环境(具体安装,自行访问度娘)
二、Selenium Grid环境安装
(备注:由于公司采用Linux系统作为服务器,所以这里以Linux作为sample,windows环境安装逻辑基本一致)
selenium官网可知,selenium是支持分布式测试的,需要部署Grid服务;
Selenium Grid
是Selenium
套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。
使用优点:
- 同时在不同的浏览器、操作系统和机器上运行测试。最大程度用于兼容性测试
- 减少运行时间
2.1 下载selenium-server-standalone
下载地址:https://www.seleniumhq.org/download/,尽量选择稳定且较新的版本。eg:selenium-server-standalone-3.9.1.jar
2.2 将jar包传输至Linux服务器
使用Finalshell工具连接Linux系统,采用命令rz或者直接拖拽的方式将selenium-server-standalone-3.9.1.jar放置在Linux对应目录下;(eg:在Linux上创建目录sample:mkdir -p /usr/local/sample,rz将selenium-server-standalone-3.9.1.jar传输至该目录下)
#安装lrzsz后,可使用命令rz/sz
yum install lrzsz -y
三、Selenium Grid启动hub和节点(node)
3.1 启动hub,即:服务中心
java -jar selenium-server-standalone-3.9.1.jar -role hub -host 0.0.0.0
# 其默认监听端口4444,默认IP是localhost 如果要修改,只需要加-port 和-host
执行后的结果:
在本地浏览器(同一局域网)访问地址http://<hub主机ip>:4444/grid/console,访问成功,可查看目前没有注册node;
备注:如果是在windows上,启动hub,前面的执行命令是一样的,只是访问的地址是:http://<hub主机ip>:4444/grid/console
3.2 注册节点node
与上面hub启动不同的是,这次node注册执行需要在被管理的pc(或者说被分配任务的pc)执行:
1.命令提示符cmd,cd到本地计算机放置selenium-server-standalone-3.9.1.jar的文件夹
2.执行:
java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://xxx.xx.xx.x:4444/grid/register
#备注:http://xxx.xx.xx.x:4444/grid/register 中x是hub的ip地址,一定要注意是ip,而不是0.0.0.0;即便你hub设置了0.0.0.0,只是表示你主机运行所以ip访问,port也可自己配置;
2.1.指定chromedriver.exe
全命令:java -Dwebdriver.chrome.driver="D:\env\selenium-grid\chromedriver.exe" -jar selenium-server-standalone-3.9.1.jar -role node -hub http://xxx.xx.xx.x:4444/grid/register
2.2.指定firefox
java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://192.168.0.245:4444/grid/register -maxSession 5 -browser browserName=firefox,seleniumProtocol=WebDriver,maxInstances=5,platform=WINDOWS,version=83.0
执行过后,结果:
1.hub服务上:
2.在node节点的电脑上:
3.浏览器访问访问地址http://<hub主机ip>:4444/grid/console,访问成功,可查看目前注册node
警示语:在分布式执行时,需要在服务端启动hub,在执行机端启动node绑定hub;
另外,chromedriver.exe在node执行机上,要放置在与selenium server一个目录下;(firefox的驱动geckodriver.exe也是需要放置在一起)
四、python脚本执行:分布式分发sample
from selenium.webdriver import Remote
from time import sleep
#这里lists的command_executor就是node节点的ip:port---->http://node的ip:node的port/wd/hub
lists={'http://172.16.132.130:5555/wd/hub':'chrome',
'http://172.16.132.130:6666/wd/hub':'firefox',
'http://172.16.132.131:5555/wd/hub':'chrome'}
for host,browser in lists.items():
print(host,browser)
driver = Remote(command_executor=host,
desired_capabilities={'browserName': browser,
'platform': 'ANY',
'version':'',
'javascriptEnabled':True
}
)
driver.get("http://www.baidu.com")
driver.maximize_window()
sleep(1)
driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']").send_keys(browser)
sleep(1)
driver.find_element_by_xpath("//input[@value='百度一下' and @id='su']").click()
sleep(3)
result_text = driver.find_element_by_xpath("//span[@class='nums_text']").text
sleep(1)
assert "百度为您找到相关结果约" in result_text
sleep(1)
driver.quit()
将py文件放置到Linux上:python 执行py文件,即可见效果:在对应执行机上,浏览器chrome成功运行。