Selenium Grid分布式自动化测试
一、Selenium Grid介绍
- Selenium Grid是selenium的三大组件之一,它允许Selenium-RC针对规模庞大的测试案例集或者需要在不同环境中运行的测试案例集进行扩展。通过将客户端命令发送到远程浏览器的实例,Selenium Grid 允许在远程计算机 (虚拟或真实) 上执行WebDriver脚本.它旨在提供一种在多台计算机上并行运行测试的简便方法。Selenium Grid允许我们在多台计算机上并行运行测试,并集中管理不同的浏览器版本和浏览器配置 。
- 本次在工作之余学习下这个技术,增加自己的竞争力,同时也为后面想学的人总结总结,让大家少走弯路。
二、环境搭建
2.1 Java环境搭建
请自行百度进行配置,并使用java -version 进行验证是否安装成功。如下图。在DOS窗口出现这些信息说明你的java安装环境无误。
2.2 Selenium server下载
通过以下的链接可以较快的下载完该软件。本次我下载的是该版本(selenium-server-standalone-3.9.1.jar)。
参考链接:selenium server快速下载
2.3 Chromedriver下载
主要用来模拟谷歌浏览器进行测试。下载后放在Python根目录(注意Chromedriver与谷歌浏览器的版本匹配),Python安装方式请自行百度,这里不做过多讲解。
驱动下载参考链接:Chromedriver快速下载
2.4 geckodriver下载
主要用来模拟火狐浏览器进行测试,具体下载方式可百度。下载后放在Python根目录
三、服务端和客户端启动
3.1 启动服务端
java -jar 服务端地址以下参数可自由配置
timeout :超时
browserTimeout :浏览器超时
role : 角色
port:端口
host:主机IP
hub:服务端地址
Dwebdriver.chrome.driver:Chromedriver的地址,这个可以不做配置
java -jar selenium-server-standalone-3.9.1.jar -role hub -port 4444 -host 192.168.2.13
出现如下信息,则服务端运行成功,接下来我们运行客户端
进入如下网址: http://<hub主机ip>:4444/grid/console可以检查服务端的信息,以及是否有节点连接上。出现以下页面,则服务启动成功。右边则是启动的参数配置。大家可以了解。
3.2 运行客户端
这里配置则需要通过hub来对服务端进行绑定。运行以下代码。
java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://192.168.2.13:4444/grid/register/
出现以下信息则说明客户端已经连接上服务端。节点注册成功
在服务端处可以看到已经注册了一个端口为5555的节点。
再次查看刚才的URL地址,我们可以在浏览器页面看到这个节点和浏览器。
四、准备脚本
4.1 Java脚本参考
/**
* 远程driver,默认使用chrome。
* 远端需启动selenium-server-standalone
* @param remoteUrl selenium-server服务端地址
* */
public WebDriver getDefaultRemoteDriver(String remoteUrl) throws Exception{
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setJavascriptEnabled(true);
URL url = new URL(remoteUrl);
WebDriver driver = new RemoteWebDriver(url,capabilities);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return driver;
}
4.2 bat脚本
@echo off
C:
cd \
Java -jar 包 -role hub -port 4444
pause
Java -jar 包 -role node -port 5555 -hub http://hub_ip:4444/grid/register
4.3 Python脚本
from selenium.webdriver import Remote
from selenium.webdriver.common.by import By
from time import sleep
#这里lists的command_executor就是node节点的ip:port---->http://node的ip:node的port/wd/hub
lists={'http://192.168.2.13:5555/wd/hub':'firefox',
}
lists1={'http://192.168.2.13: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")
print("pass")
driver.maximize_window()
sleep(1)
driver.find_element(By.ID,"""kw""").send_keys(browser)
sleep(1)
driver.find_element(By.ID,"""su""").click()
sleep(3)
result_text = driver.find_element(By.XPATH,"""//*[@id="tsn_inner"]/div[2]/span""").text
sleep(1)
assert "百度为您找到相关结果约" in result_text
sleep(1)
driver.quit()
五、运行脚本
请愉快的运行脚本!