请选择 进入手机版 | 继续访问电脑版

基于Docker+Selenium Grid的测试技术应用示例代码

[复制链接]
查看59 | 回复9 | 2021-9-13 16:02:07 | 显示全部楼层 |阅读模式

Selenium Grid先容

只管 在将来 将会推出的Selenium 4.0版本中对Selenium Grid的一些新特性举行 了阐明 ,但是现在 来看官方并没有太多详细 文档供大家参考,以是 本书中仍团结 现在 被广泛使用 的Selenium Grid 版本举行 讲解。

正如其官网对Selenium Grid的形貌 ,它是一个智能代理服务器,答应 Selenium测试将下令 路由到长途 Web欣赏 器实例。其目标 是提供一种在多台计算机上并行运行测试的简便方法。使用 Selenium Grid,一台服务器充当将JSON格式的测试下令 路由到一个或多个已注册Grid节点的中枢,以获得对长途 欣赏 器实例的访问。Hub有一个已注册服务器的列表,它可以访问并答应 控制这些实例。Selenium Grid答应 我们在多台计算机上并行运行测试,并集中管理不同的欣赏 器版本和欣赏 器设置 。

基于Docker+Selenium Grid的测试技术应用示例代码

图1 Selenium Grid的组件构成图

如图1所示,可以看到Selenium Grid紧张 由2部分构成,即:Hub和Nodes。您可以使用 Python、Java、C#等语言编写测试Selenium脚本,每个Selenium Grid仅有一个Hub,客户端脚本可以指定毗连 到该Hub(主控节点或者叫集线器),Hub吸取 客户端脚本的运行测试哀求 ,同时将这些测试哀求 分发到已注册的一个或多个节点去实验 并网络 运行结果 。Selenium Grid中可以一个或多个Node(节点)。作为节点的机器不必与Hub或其他Node具有雷同 的操作体系 或雷同 的欣赏 器。即:某个Node节点大概 是Windows操作体系 ,而在该体系 上安装的是Internet Explorer欣赏 器,别的 的Node节点大概 用的是Linux、Mac操作体系 ,而它们安装的欣赏 器大概 是Firefox、Safari、Chrome等。这些Node节点的设置团结 测试来讲,就是要看您想做那些操作体系 、欣赏 器版本的兼容性测试了,在现实 工作中请团结 测试实验 计划和策略举行 选择。

基于Docker的Selenium Grid的干系 设置

在Docker Hub中提供了Selenium Grid的干系 镜像文件可供使用 ,如图2所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图2 Selenium Grid的干系 镜像资源

这里,我们应用“docker pull”下令 分别将这3个镜像拉取下来,对应的拉取下令 如下:

  1. docker pull selenium/hub
  2. docker pull selenium/node-chrome
  3. docker pull selenium/node-firefox
复制代码

镜像文件拉取到本地后,您可以使用 “docker images”下令 查看一下干系 镜像的信息,如图3所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图3 Selenium Grid的干系 镜像信息

这里,先来测试一下Hub与Node节点之间的连通性。

启动Hub,如图4所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图4 创建并启动hub容器

创建并启动 chromenode容器节点,如图5所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图5 创建并启动chromenode容器节点

创建并启动 firefoxnode容器节点,如图6所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图6 创建并启动firefoxnode容器节点

接下来,在本机欣赏 器地址栏输入“http://localhost:4444/grid/console”,即:打开Selenium Grid的控制台,将出现图7所示页面。

基于Docker+Selenium Grid的测试技术应用示例代码

图7 Grid Console控制台信息

从图7可知,当前使用 的Selenium Grid 版本为3.141.59版本,对应毗连 到Hub的两个Node节点分别是IP为172.17.0.4的Linux操作体系 使用 的是Firefox 75.0版本的欣赏 器和IP为172.17.0.3的Linux操作体系 使用 的是Chrome 81.0.4044.92版本的欣赏 器。在默认环境 下Hub节点使用 的是4444端口,而Node节点在本例中使用 的是5555端口,假如 在同一个容器中出现端口冲突等环境 ,则您必要 根据现实 环境 举行 调整设置其他端口以避免端口冲突环境 发生。

基于Docker+Selenium Grid的案例演示

下面,笔者将团结 Bing搜索 案例在Chrome和Firefox欣赏 器上实现兼容性测试。在颠末 前面Selenium、Docker和Selenium Grid干系 知识的学习后,您想到了什么?是不是可以通过使用 Docker+Selenium Grid就可以或许 完成基于不同欣赏 器的兼容性测试呢?是的,这确实是个好主意。

但是,假如 让Selenium测试脚本在不同欣赏 器中运行,又必要 做些什么呢?

在脚本计划 上,您必要 做一些改变,通常环境 下,要在脚本的运行时指定主机和端口,脚本雷同 于以下方式:

  1. import time
  2. from selenium import webdriver
  3. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
  4. driver = webdriver.Remote(
  5. command_executor='http://192.168.1.102:4444/wd/hub',
  6. desired_capabilities=DesiredCapabilities.CHROME)
  7. base_url = 'https://cn.bing.com'
  8. driver.get(base_url)
  9. driver.save_screenshot('chrome.png')
  10. driver.close()
复制代码

通常在实验 时,只需指定Hub的地址(即:http://192.168.1.102:4444/wd/hub)。这里宿主机的IP如图8所示, Hub会将脚本自动 分配给Node节点去实验 。

基于Docker+Selenium Grid的测试技术应用示例代码

图8 宿主机的IP地址信息

- command_executor参数:该参数为选填参数,可指定长途 服务器URL字符串或自定义长途 毗连 ,默以为 “http://127.0.0.1:4444/wd/hub”。

- desired_capabilities参数:该参数为必填参数,可根据环境 设置 启动欣赏 器会话时哀求 功能的字典。这里我们应用的是“DesiredCapabilities.CHROME”,您可以查看其对应源代码如下所示。

  1. class DesiredCapabilities(object):
  2. """
  3. Set of default supported desired capabilities.
  4. Use this as a starting point for creating a desired capabilities object for
  5. requesting remote webdrivers for connecting to selenium server or selenium grid.
  6. Usage Example::
  7. from selenium import webdriver
  8. selenium_grid_url = "http://198.0.0.1:4444/wd/hub"
  9. # Create a desired capabilities object as a starting point.
  10. capabilities = DesiredCapabilities.FIREFOX.copy()
  11. capabilities['platform'] = "WINDOWS"
  12. capabilities['version'] = "10"
  13. # Instantiate an instance of Remote WebDriver with the desired capabilities.
  14. driver = webdriver.Remote(desired_capabilities=capabilities,
  15. command_executor=selenium_grid_url)
  16. Note: Always use '.copy()' on the DesiredCapabilities object to avoid the side
  17. effects of altering the Global class instance.
  18. """
  19. FIREFOX = {
  20. "browserName": "firefox",
  21. "acceptInsecureCerts": True,
  22. }
  23. INTERNETEXPLORER = {
  24. "browserName": "internet explorer",
  25. "version": "",
  26. "platform": "WINDOWS",
  27. }
  28. EDGE = {
  29. "browserName": "MicrosoftEdge",
  30. "version": "",
  31. "platform": "ANY"
  32. }
  33. CHROME = {
  34. "browserName": "chrome",
  35. "version": "",
  36. "platform": "ANY",
  37. }
  38. OPERA = {
  39. "browserName": "opera",
  40. "version": "",
  41. "platform": "ANY",
  42. }
  43. SAFARI = {
  44. "browserName": "safari",
  45. "version": "",
  46. "platform": "MAC",
  47. }
  48. HTMLUNIT = {
  49. "browserName": "htmlunit",
  50. "version": "",
  51. "platform": "ANY",
  52. }
  53. HTMLUNITWITHJS = {
  54. "browserName": "htmlunit",
  55. "version": "firefox",
  56. "platform": "ANY",
  57. "javascriptEnabled": True,
  58. }
  59. IPHONE = {
  60. "browserName": "iPhone",
  61. "version": "",
  62. "platform": "MAC",
  63. }
  64. IPAD = {
  65. "browserName": "iPad",
  66. "version": "",
  67. "platform": "MAC",
  68. }
  69. ANDROID = {
  70. "browserName": "android",
  71. "version": "",
  72. "platform": "ANDROID",
  73. }
  74. PHANTOMJS = {
  75. "browserName": "phantomjs",
  76. "version": "",
  77. "platform": "ANY",
  78. "javascriptEnabled": True,
  79. }
  80. WEBKITGTK = {
  81. "browserName": "MiniBrowser",
  82. "version": "",
  83. "platform": "ANY",
  84. }
  85. WPEWEBKIT = {
  86. "browserName": "MiniBrowser",
  87. "version": "",
  88. "platform": "ANY",
  89. }
复制代码

从DesiredCapabilities类的源码可知“DesiredCapabilities.CHROME”是该类定义的一个字典对象。

这里笔者采用多线程的方式,实现分别在Chrome和Firefox欣赏 器实验 Bing搜索 业务,对应脚本如下。

Grid_Test.py文件内容:

  1. from threading import Thread
  2. from selenium import webdriver
  3. from time import sleep,ctime
  4. from selenium.webdriver.common.by import By
  5. def Test_Bing(Host, Browser):
  6. caps = {'browserName': Browser}
  7. driver = webdriver.Remote(command_executor=Host, desired_capabilities=caps)
  8. driver.get('http://www.bing.com')
  9. driver.find_element(By.ID,'sb_form_q').send_keys('异步社区')
  10. driver.find_element(By.ID,'sb_form_go').click()
  11. PicName=Browser+'_result'+'.png'
  12. driver.save_screenshot(PicName)
  13. assert ('没有与此相关的结果' not in driver.page_source)
  14. sleep(2)
  15. driver.close()
  16. if __name__ == '__main__':
  17. pcs = {'http://192.168.1.102:4444/wd/hub': 'chrome',
  18. 'http://localhost:4444/wd/hub': 'firefox'
  19. }
  20. threads = []
  21. tds=range(len(pcs))
  22. # 创建线程
  23. for host, browser in pcs.items():
  24. t = Thread(target=Test_Bing, args=(host, browser))
  25. threads.append(t)
  26. # 启动线程
  27. for i in tds:
  28. threads[i].start()
  29. for i in tds:
  30. threads[i].join()
复制代码

从上面的脚本,大家可以看到创建了一个名称为Test_Bing()的函数,其包含两个参数,分别是主机和欣赏 器。函数的实验 意图就是根据长途 服务器URL字符串和传入的欣赏 器名称字符串,在对应的欣赏 器中实验 搜索 业务,且搜索 词为“异步社区”,对实验 结果 举行 截图,截图的名称为对应欣赏 器名称+“_result.jpg”文件,并对搜索 后的结果 举行 断言。必要 阐明 的是,这里对结果 举行 截图的目标 不仅仅是想看一下结果 ,还有一个很紧张 的缘故原由 是在使用 Selenium Grid时,实验 测试过程中不会出现欣赏 器,以是 您看不到实验 过程,为了证明 结果 的精确 性我们也必要 截一个图证明 其确实是工作了并且实验 是精确 的。假如 您还想看到不同的容器在实验 过程中的界面,也可以使用 VNC Viewer毗连 到对应容器(但需下载对应的selenium/node-firefox-debug和selenium/node-chrome-debug镜像文件,debug末了 的镜像都带有VNC服务端,本机安装VNC客户端,即可长途 毗连 。5900端口为VNC Viewer的监听端口,故做了一个端口映射),如图9和图10所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图9 创建并启动Debug版本的节点容器

基于Docker+Selenium Grid的测试技术应用示例代码

图10 VNC Viewer观察节点容器的脚本实验 环境

究竟 上这对于测试工作并没有太多意义,故不做太多笔墨 赘述。

在主函数中,定义了一个包含2个元素的字典,大家可以看到笔者使用 了2种同一个地址不同的表示方式(宿主机的IP地址为192.168.1.102),而“localhost”也表示本机,即宿主机。那么为什么不都用“192.168.1.102”或者“localhost”呢?这是由于 字典的键(Key)是不答应 重复的。接下来创建了一个线程列表,以pcs字典的键、值作为Test_Bing()函数的参数,并添加到线程列表。而后启动线程列表中的各线程。

在运行脚本前,需保证创建并启动Hub和Node节点容器(注:这里笔者应用的为非Debug版本Node镜像),如图11所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图11 创建并启动Hub和Node节点容器

脚本实验 完成后,将会天生 “chrome_result.jpg”和“firefox_result.jpg”这2个图片文件,如图12所示。

基于Docker+Selenium Grid的测试技术应用示例代码

图12 脚本实验 完成后天生 的图片文件信息

如图13和图14所示,在本次兼容性测试中大家可以看到这2个欣赏 器都实验 了雷同 的Bing搜索 业务,它们的页面展示、布局、内容基本是雷同 的,但是却存在2个小的标题 ,就是在Chrome欣赏 器中搜索 到的结果 为“855,000 Results”,而Firefox欣赏 器中搜索 到的结果 为“859,000 Results”,它们是不划一 的。另一个小标题 是,在Firefox欣赏 器会表现 “Sign in”和一个登陆图标,而在Chrome欣赏 器中却没有。理论上来讲这是2个严峻 级别较低的小Bug,但笔者建议针对这两个小的差异,必要 和产品、研发的同砚 再确认一下,产品、测试、研发应同一 、明确 需求,明确 后再修改需求或代码,使两者保持划一 。

基于Docker+Selenium Grid的测试技术应用示例代码

图13 chrome_result.jpg图片文件信息

基于Docker+Selenium Grid的测试技术应用示例代码

图14 firefox_result.jpg图片文件信息

到此这篇关于基于Docker+Selenium Grid的测试技术应用示例代码的文章就先容 到这了,更多干系 Docker Selenium Grid测试技术内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 123457846 | 2021-9-13 21:09:03 | 显示全部楼层
这么好的帖子,应该加精华!
回复

使用道具 举报

avatar ty实话实说2017 | 2021-9-20 07:09:16 | 显示全部楼层
投admin楼主一票,不用谢哦!
回复

使用道具 举报

avatar 极品小处男处v | 2021-9-23 04:20:22 | 显示全部楼层
经典!
回复

使用道具 举报

avatar 123457839 | 2021-9-23 04:20:25 | 显示全部楼层
admin楼主今年多大了?
回复

使用道具 举报

avatar 笑到呆萌 | 2021-9-27 16:32:28 | 显示全部楼层
看了这么多帖子,第一次看看到这么有内涵的!
回复

使用道具 举报

avatar 123457376 | 2021-10-7 23:37:50 | 显示全部楼层
有机会找admin楼主好好聊聊!
回复

使用道具 举报

avatar 爱最爱我爱的爱y | 2021-10-12 06:57:27 | 显示全部楼层
林子大了,什么鸟都有了啊!
回复

使用道具 举报

avatar haiyuezhihun | 2021-10-15 22:49:28 | 显示全部楼层
祖国尚未统一,我却天天灌水,好内疚!
回复

使用道具 举报

回帖也有有水平的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则