1、Selenium Grid简介
Selenium Grid组件专门用于远程分布式测试或并发测试。使用此组件可以在一台计算机上给多台计算机(不同操作系统和不同版本浏览器环境)分发多个测试用例从而并发执行,
大大提高了测试用例的执行效率,基本满足大型项目自动化测试的时限要求和兼容性要求。
Selenium Grid使用Hub和Node模式,一台计算机作为Hub(管理中心)管理其他多个Node(节点)计算机,Hub负责将测试用例分发给多台Node计算机执行,并收集多台Node计算机执行结果的报告,汇总后提交一份总的测试报告。
Hub:
>在分布式测试模式中,只能有一台作为Hub的计算机
>Hub负责管理测试脚本,并负责发送脚本给其他Node节点
>所有的Node节点计算机必须先在作为Hub的计算机中进行注册,注册成功后再和Hub计算机通信,Node节点计算机会告之Hub自己的相关信息,例如,Node节点的操作系统和浏览器相关版本。
Node:
>在分布式测试模式中,可以有一个或多个Node节点
>Node节点会打开本地的浏览器完成测试任务并返回测试结果给Hub
>Noel节点的操作系统和浏览器版本无需和Hub保持一致
>在Node节点上可以同时打开多个浏览器并行执行测试任务

2、分布式自动化测试环境准备
(1)下载 JDK 1.8安装文件(最好从官网下载)
(2)安装JDK
(3)配置环境变量(1.8后的JDK会自动添加环境变量)
(4)在CMD中输入java -version命令后回车,显示出java信息,不报错说明安装成功

3、Selenium Grid的使用方法
(1)远程调用Firefox浏览器进行自动化测试(其他浏览器同理)
具体步骤如下:
1)找两台WIndows系统的计算机A和B,A计算机作为Hub,B计算机作为Node(如果没有可以用本机即作Hub又作Node)
2)两台计算机均访问http://www.seleniumhq.org/download,单击“Selenium Standalone Server”下的“Download Version x.x.x”进行下载,并保存在两台计算机的存放Webdriver驱动的目录中(如D盘根目录)
3)在机器A上打开CMD窗口,并当前工作目录切换到D盘根目录,然后执行如下语句:
java -jar selenium-server-standalone-3.141.59.jar -role hub (不报错即成功)
-role hub : 启动一个Hub服务,作为分布式管理中心,等待webdriver客户端进行注册和请求,默认接收注册的地址为:http://localhost:4444/grid/register,默认启动端口为4444
4)在机器A(假如Ip地址为192.168.1.123)中的Firefox浏览器(其他浏览器也可以)地址栏中访问http://localhost:4444/grid/console,如果访问的网页中显示出“view config”的链接,表示Hub已经成功启动
5)在机器B(假如Ip地址为192.168.1.124)中打开CMD窗口,将当前工作目录D盘根目录(即selenium-server-standalone-3.141.59.jar和Webdriver驱动所在目录),输入如下命令:
运行Firefox:
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub http://192.168.31.94:4444/grid/register-Dwebdriver.firefox.driver="D:\geckodriver.exe" -port 6666 -maxSession 5 -browser browserName="firefox",maxInstances=5
运行Chrome:
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub http://192.168.31.94:4444/grid/register-Dwebdriver.chrome.driver="D:\chromedriver.exe" -port 6666 -maxSession 5 -browser browserName="chrome",maxInstances=5
运行IE:
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub http://192.168.31.94:4444/grid/register-Dwebdriver.ie.driver="D:\IEDriverServer.exe" -port 6666 -maxSession 5 -browser browserName="internet explorer",maxInstances=5
运行三个浏览器:
java -jar selenium-server-standalone-3.141.59.jar -role webdriver -hub http://172.29.10.127:4444/grid/register-Dwebdriver.chrome.driver="e:\chromedriver.exe"-Dwebdriver.ie.driver="e:\IEDriverServer.exe"-Dwebdriver.firefox.driver="e:\geckodriver.exe" -port 6666 -maxSession 5 -browser browserName="internet explorer",maxInstances=5 -browser browserName="chrome",maxInstances=5 -browser browserName="firefox",maxInstance=5

参数说明:
>role : 参数值wevdriver表示Node节点名字
>hub : 参数值表示管理中心的Url地址,Node会连接到这个地址进行节点注册
>port : 参数值表示Node节点服务的端口号为6666,建议使用大于5000的端口号

6)再次访问http://localhost:4444/grid/console,验证Node节点是否已在Hub上注册成功
7)分布式执行的测试脚本
测试逻辑:
使用FireFox浏览器访问sogou首页,进行关键词“webdriver 实战宝典”的搜索,并验证搜索结果页面源码中是否出现作者名称
测试脚本:

#encoding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import timedriver = webdriver.Remote(#设定Node节点的Url地址,后续将通过这个地址连接到Node计算机command_executor = "http://localhost:6666/wd/hub",desired_capabilities = {#指定远程计算机执行使用的浏览器"browserName":"internet explorer","video":"True",#远程计算机的平台"platform":"WINDOWS"#"platform":"windows_nt"
    }
)print ("Video" + "http://www.baidu.com" + driver.session_id)try:driver.implicitly_wait(30)driver.maximize_window()driver.get("http://www.sogou.com")assert u"搜索" in driver.titleele = driver.find_element_by_id("query")ele.send_keys(u"webdriver 实战宝典")ele.send_keys(Keys.RETURN)time.sleep(3)assert u"吴晓华" in driver.page_sourceprint "done!"
finally:driver.quit()

测试结果:在机器B上可以看到,计算机会自动启动浏览器执行测试脚本,执行完毕后浏览器会自动退出。在机器A上可以看到自动化测试的执行结果

4、实现并发的分布式自动化测试
Selenium Grid不仅支持在同一台机器上同时启动好几个浏览器并发跑测试用例,也支持同时在多台不同机器上启动不同的浏览器并发跑测试用例。
操作步骤:
(1)在机器A、B和C的D盘根目录(Webdriver驱动所在目录)放入selenium-server-standalone-3.141.59.jar
(2)机器A启动Hub服务
(3)机器A重新打开一个CMD,并注册为节点
(4)机器B、机器C打开Cmd,并注册为节点
注意:注册的A、B和C机器节点的端口号必须不一致
测试脚本:

#encoding=utf-8
from multiprocessing import Pool
import os, time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from multiprocessing import Manager, current_processdef node_task(name, lock, arg, successTestCases, failTestCases):# 获取当前进程名procName = current_process().nameprint procNametime.sleep(1.2)print arg['node']print arg["browerName"]print 'Run task %s (%s)...\n' % (name, os.getpid())start = time.time()driver = webdriver.Remote(command_executor = "%s" %arg['node'],desired_capabilities={"browserName": "%s" %arg["browerName"],"video": "True","platform": "WINDOWS"})try:driver.implicitly_wait(30)driver.maximize_window()driver.get("http://www.sogou.com")assert u"搜狗" in driver.titleelem = driver.find_element_by_id("query")elem.send_keys(u"webdriver实战宝典")time.sleep(2)elem.send_keys(Keys.RETURN)assert u"吴晓华" not in driver.page_source# 请求获取共享资源的锁
        lock.acquire()# 向进程间共享列表successTestCases中添加执行成功的用例名称successTestCases.append("TestCase" + str(name))# 释放共享资源的锁,以便其他进程能获取到此锁
        lock.release()print "TestCase" + str(name) + " done!"except AssertionError,e:print "AssertionError occur!""testCase" + str(name)print e# 截取屏幕driver.save_screenshot('e:\\screenshoterror' + str(name) + '.png')lock.acquire()# 向共享列表failTestCases中添加执行失败的用例名称failTestCases.append("TestCase" + str(name))lock.release()print u"测试用例执行失败"except Exception,e:print "Exception occur!"print edriver.save_screenshot('e:\\screenshoterror' + str(name) + '.png')# 请求获得共享资源操作的锁,操作完后自动释放
        with lock:# 向共享列表failTestCases中添加执行失败的用例名称failTestCases.append("TestCase" + str(name))print u"测试用例执行失败"finally:driver.quit()end = time.time()print 'Task %s runs %0.2f seconds.' % (name, (end - start))def run(nodeSeq):# 创建一个多进程的Manager实例manager = Manager()# 定义一个共享资源列表successTestCasessuccessTestCases = manager.list([])# 定义一个共享资源列表failTestCasesfailTestCases = manager.list([])# 创建一个资源锁lock = manager.Lock()# 打印主进程的进程IDprint 'Parent process %s.' % os.getpid()# 创建一个容量为3的进程池p = Pool(processes=3)testCaseNumber = len(nodeSeq)for i in range(testCaseNumber):# 循环创建子进程,并将需要的数据传入子进程p.apply_async(node_task, args=(i + 1, lock, nodeSeq[i],successTestCases, failTestCases))print 'Waiting for all subprocesses done...'# 关闭进程池,不再接受新的请求任务
    p.close()# 阻塞主进程直到子进程退出
    p.join()return successTestCases, failTestCasesdef resultReport(testCaseNumber, successTestCases, failTestCases):# 下面代码用于打印本次测试报告print u"测试报告:\n"print u"共执行测试用例:" + str(testCaseNumber) + u"个\n"print u"成功的测试用例:", str(len(successTestCases))if len(successTestCases) > 0:for t in successTestCases:print telse:print u"无"print u"失败的测试用例:", str(len(failTestCases))if len(failTestCases) > 0:for t in failTestCases:print telse:print u"无"if __name__ == '__main__':# 节点列表nodeList=[{"node":"http://127.0.0.1:6666/wd/hub","browerName":"internet explorer"},{"node":"http://127.0.0.1:6666/wd/hub","browerName":"chrome"},{"node":"http://127.0.0.1:6666/wd/hub", "browerName":"firefox"}]# 获取节点个数testCaseNumber = len(nodeList)# 开始多进程分布式测试successTestCases, failTestCases = run(nodeList)print 'All subprocesses done.'# 在控制台中打印测试报告resultReport(testCaseNumber, successTestCases, failTestCases)

5、注意点:
jar和Webdriver浏览器驱动放在同一目录下
机器A:启动Hub
机器B:注册到这个Hub
程序:在机器A运行,然后指定机器B的ip作为driver的参数,然后可以在机器B运行测试程序

转载于:https://www.cnblogs.com/test-chen/p/11104937.html

Selenium Grid的使用(分布式测试)相关推荐

  1. Docker+Selenium Grid+Python搭建分布式测试环境

    原文:http://www.51testing.com/html/20/n-3722620.html 转载于:https://www.cnblogs.com/gcgc/p/9851614.html

  2. Selenium Grid 分享

    Selenium 家族简单介绍: Selenium 1.0 Selenium 1.0 包括了 Selenium IDE, Selenium Grid和Selenium RC(Selenium Remo ...

  3. 03-19 分布式测试-Selenium Grid

    简介 Selenium Grid 远程运行 Selenium test,主旨是在多个机器上并行运行 selenium 优点 它是所有测试的中心入口点 可以管理和控制浏览器运行的 Nodes/环境 扩展 ...

  4. 【Selenium Grid 分布式测试】Selenium Grid-简介

    前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210423. 9.Selenium Grid 分布式测试 Selenium Grid 分布式测试-Selenium Grid简 ...

  5. selenium===使用docker搭建selenium分布式测试环境

    准备: #请在此之前务必先了解,selenium grid :参考:selenium-grid ,下载地址, win-本地部署过程 >>>环境准备: Linux操作系统 >&g ...

  6. Robot Framework + Selenium2Library环境下,结合Selenium Grid实施分布式自动化测试

    最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做 ...

  7. Selenium Grid跨浏览器-兼容性测试

    Selenium Grid跨浏览器-兼容性测试 这里有两台机子,打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.16 ...

  8. Appium 分布式selenium grid

    selenium grid是什么呢? selenium主要由三个工具组成:WebDriver.IDE.Grid.WebDriver 使用浏览器提供的 api 来控制浏览器,就像用户在操作浏览器,不具有 ...

  9. Selenium Grid的搭建方法

    一.什么是Selenium Grid Selenium Grid 是一种可以并发执行 GUI 测试用例的测试执行机的集群环境,分为 HUB 和 Node 模式.Selenium Hub 用来管理各个 ...

最新文章

  1. 管理分布式session的四种方式。
  2. 基于大数据的Uber数据实时监控(Part 2:Kafka和Spark Streaming)
  3. python通过requirements.txt文件批量安装依赖包的实现步骤
  4. 计算某一段程序消耗的内存和时间【C#】
  5. 平面/UI设计师社区网站集设网|让你作品开始发光
  6. Delphi通过ADOQuery控件实现Sqlserver数据库多结果集的数据打印
  7. config.o:文件无法辨识_HAZOP有哪些局限性,及系统生命周期不同阶段的危险辨识...
  8. CNN数值初始化——xavier
  9. 【金融人士工具大全】整理不易,且珍惜
  10. 吉林大学邮箱smtp服务器,吉林大学邮件系统成功案例-彩讯Richmail邮件系统,致力于互联网行业软件的开发和应用12年....
  11. OPPO R7C刷机包下载_OPPO r7c原厂固件包下载地址
  12. HDU4556_欧拉函数求解法拉数列
  13. 电子工程师是怎样的成长之路?
  14. java 两张图片合成
  15. 【包运行】Java 实现图形界面的邮件轰炸机附带视频指导教程
  16. 自如_智能家居硬件测试
  17. Wap开发技术问题大全
  18. laradock 安装使用 kafka
  19. OpenCV小例程——分区域不同的显示视频
  20. 完整的大数据学习体系

热门文章

  1. Keras【Deep Learning With Python】—使用keras-神经网络来做线性回归问题
  2. 使用tomcat软件在本地搭建服务器
  3. 说一说安装sklearn遇到的坑
  4. 人脸识别技术有哪些新的发展_疫情下,旅游景区人脸识别技术可以应用在哪些场景?...
  5. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象教学设计(教案)...
  6. python commands模块_python commands模块在python3.x被subprocess取代
  7. ldap 高级查询 禁用_化妆水有治疗耳部疾患、痔疮等11大功效?专家表示或含禁用物质...
  8. 细节无处不在!东莞网络推广分享哪些操作会影响网站优化效果?
  9. 原创文章收录不高从根源找问题
  10. 网站优化需要团队协作