简介
Selenium Grid是Selenium的三大组件之一,作用就是分布式执行测试。讲分布式之前还是要说说UI自动化的优势来突出Selenium Grid,最简单的两点解决重复执行测试、解决多浏览器兼容这是UI自动化的价值;那分布式是什么概念?简单的说就是老大收到任务,分发给手下去干;通过Selenium Grid的可以控制多台机器多个浏览器执行测试用例,分布式上执行的环境在Selenium Grid中称为node节点。
使用背景
当自动化测试用例达到一定数量的时候,比如上万,一台机器执行全部测试用例耗时5个小时(只是举例,真正的耗时是需要根据测试用例场景的复杂度决定的),而如果需要覆盖主流浏览器比如Chrome、Firefox,加起来就是10个小时;这时候领导跟你说有什么办法可以解决这个执行速度?当然最笨的办法就是另外拿台机器,然后部署环境,把测试用例分开去执行然后合并结果即可。而Selenium也想到了这点,所以有了Selenium Grid的出现,它就是解决分布式执行测试的痛点。
工作原理
Selenium Grid实际它是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行。下面结合环境部署来理解Hub与node节点的关系。
环境部署
下载jar包
http://selenium-release.storage.googleapis.com/index.html命令行启动服务
启动本地一个hub,一个node。
java -jar selenium-server-standalone-4.0.0-alpha2.jar -role hub - port
java -jar selenium-server-standalone-4.0.0-alpha2.jar -role hub - port 5555
- 运行下面的代码
from threading import Thread
from selenium import webdriver
from time import ctime
#测试用例
def test_baidu(host, browser):
print('start: %s' %ctime())
print(host, browser)
dc = {'browserName': browser}
driver = webdriver.Remote(command_executor=host, desired_capabilities=dc)
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys(browser)
driver.find_element_by_id('su').click()
driver.close()
if __name__ == '__main__':
# 启动参数(指定运行主机与浏览器)
lists = {'http://127.0.0.1:4444/wd/hub': 'chrome',
'http://127.0.0.1:5555/wd/hub': 'firefox',
}
threads = []
files = range(len(lists))
for host, browser in lists.items():
t = Thread(target=test_baidu,args=(host, browser))
threads.append(t)
for i in files:
threads[i].start()
for j in files:
threads[j].join()
print('end: %s:' %ctime())
参考:https://blog.csdn.net/qq_37884273/java/article/details/81704134