linux+python+selenium grid构建可视化分布式自动化测试环境

我们在做爬虫,或者自动化测试的时候,经常需要用到selenium,这个框架大家也都不陌生,相信用过的朋友, 大部分肯定都知道在Windows下不管做UI自动化测试还是做爬虫元素提取,都是非常方便的,比如看下面的代码,是一个最基本的在Windows下操控Chrome浏览器打开网页的代码


 
 
from selenium import webdriverdriver = webdriver.Chrome(executable_path='C:\\chrome\\chromedriver246.exe')driver.get("http://www.baidu.com")import webdriver
driver = webdriver.Chrome(executable_path='C:\\chrome\\chromedriver246.exe')
driver.get("http://www.baidu.com")


问题来了, 这段代码假如我放到我的Linux服务器上,是否还能够正常打开我Windows电脑的Chrome浏览器并打开网页?


想想也很容易明白,肯定控制不了Windows电脑,更不用说浏览器网页了,那如果我的脚本放服务器想跑的话,第一种解决方案就是用无头浏览器,这个不多说,导入无头浏览器相关的包就行,可以实现无界面操作, 不过我这里 提两个需求 ,看 大家是否知道有什么解决方案


需求一:


Linux下跑自动化脚本,想在Windows看带界面的执行过程,该怎么做?


需求二:


假如我有一个需要做UI自动化测试的模块,自动化测试脚本也放在Linux上,并且这个模块会由多个测试人员来进行测试,那么我服务器的脚本如何能根据不同测试人员的电脑Ip来控制他们Windows下的Chrome浏览器?


通过这两个需求,引申出来今天给大家分享的技术知识


首先看 一幅草图, 想实现上面的两个需求,下面的图形 要先看明白, 其实也很直观, Linux的hub管理中心, 发送驱动 指令 到对应的IP,去找对应Ip的电脑 上的Chrome驱动(node) 去打开浏览器,进行自动化操作


640?wx_fmt=jpeg


这样的控制流程通过什么技术实现?


答案:selenium grid


selenium grid可以同时在不同机器上测试不同浏览器,包含一个hub和多个node。 node会发送配置信息到hub,hub记录并跟踪每一个node的配置信息,同时hub会接受到即将被执行的测试用例及其相关信息,并通过这些信息自动选择可用的且符合浏览器与平台搭配要求的node,node被选中后,测试用例所调用的selenium命令就会被发送到hub,hub再将这些命令发送到指定给该测试用例的node,之后由node执行测试
环境配置:
Linux:
1、jdk 1.8+ 2、selenium-server-standalone-3.8.1.jar 3、selenium 3版本
Windows:
1、jdk 1.8+
2、selenium-server-standalone-3.8.1.jar 3、selenium 3版本
注意事项: 1、 selenium-server-standalone 版本一定要和selenium版本匹配,必须都是3版本或者都是2版本,不能一个2一个3, 2、chromedriver和jar包放同一目录!!!(这地方踩过坑,格外注意)

640?wx_fmt=jpeg


以上基本环境配置好后,我们开始执行命令启动服务
1、首先启动Linux服务器上的selenium grid服务,需要切换到selenium-server-standalone-3.81.jar所在目录
 java -jar selenium-server-standalone-3.8.1.jar -role hub -port 4455 这里Hub端开启了4455端口,用来接收node连接信息,启动成功提示:Registered a node http://10.21.104.88:4455
2、切换到Windows里面的selenium-server-standalone-v3.0.1.jar所在目录
java -jar selenium-server-standalone-3.8.1.jar -role node -port 4455 -hub http://10.21.104.88:4455/grid/register(ip为Linux服务器ip) 启动成功提示:The node is registered to the hub and ready to use

连接成功的话浏览器打开:http://10.21.104.88:4455/grid/console 

可以查看连接hub的node信息,有浏览器版本号,表明连接成功,我这里有两台电脑都连了hub

640?wx_fmt=jpeg

好了,当我们把繁琐的环境配置好后,并且hub和node命令也都开启并成功建立了连接,我们就可以编写脚本代码了,下方是脚本代码,在本地我们之前用webdriver.Chrome即可,现在在服务器上,我们通过webdriver.Remote来创建driver对象,执行这个python文件,即可打开Windows的Chrome浏览器
 
 
from selenium import webdriver#driver = webdriver.Chrome(executable_path='C:\chrome\chromedriver246.exe')desired_capabilities={'browserName': 'chrome', 'version': '', 'platform': 'ANY', 'javascriptEnabled': True, 'webdriver.chrome.driver': 'C:\\chrome\\chromedriver246.exe'  }# 这里的ip是本机的ipv4地址,django项目中的话,可以在META信息中获取Windows的Ip地址作为参数传到下方driver = webdriver.Remote('http://10.20.57.160:4455/wd/hub',desired_capabilities=desired_capabilities)driver.get("http://www.baidu.com")import webdriver

#driver = webdriver.Chrome(executable_path='C:\chrome\chromedriver246.exe')

desired_capabilities={'browserName': 'chrome',
'version': '',
'platform': 'ANY',
'javascriptEnabled': True,
'webdriver.chrome.driver': 'C:\\chrome\\chromedriver246.exe'
}

# 这里的ip是本机的ipv4地址,django项目中的话,可以在META信息中获取Windows的Ip地址作为参数传到下方
driver = webdriver.Remote('http://10.20.57.160:4455/wd/hub',desired_capabilities=desired_capabilities)
driver.get("http://www.baidu.com")


总结:

selenium grid通过上述方式即可实现文章开头所说的两个需求,Linux脚本控制Windows浏览器,以及根据不同的IP,控制不同的Windows下的浏览器,另外你在测试过程中,肯定还会遇到很多问题,这是学习新知识的必经阶段,欢迎留言探讨


python爬虫人工智能大数据公众号

640?wx_fmt=gif

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值