selenium Grid只提供多系统,多浏览器的执行环境,selenium Grid本身并不提供并行的执行测试用例,以下是使用多线程技术结合
selenium Grid实现分布式并行地执行测试用例
启动 selenium server
在本机打开两个命令提示符窗口
本机启动一个主hub和一个node节点,端口号分别为4444,5555,本机IP地址为:xxx.xxx.xxx.xxx
C:\selenium>java -jar selenium-server-standalone-2.47.0.jar -role hub
C:\selenium>java -jar selenium-server-standalone-2.47.0.jar -role node -port 5555
启动一个远程node(设置端口号为6666),IP地址为:xxx.xxx.xxx.xxx
fnngj@fnngj-VirtualBox:~/selenium$ java -jar selenium-server-standalone-2.47.0.jar -role node -port 6666
-hub http://172.16.10.66:4444/grid/register
运行测试脚本
from threading import Thread
from selenium import webdriver
from time import sleep,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')
sleep(3)
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':'internet explorer',
'http://xxx.xxx.xxx.xxx:6666/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 i in files:
threads[i].join()
print('end: %s' % ctime())