Selenium Grid简介

Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行(官方说明)

简单来说通过selenium grid可以实现一台服务器控制多台node节点机器远程执行selenium自动化测试脚本。比如自动化测试脚本存放在一台hub主机上,那么通过grid就可以控制多台node客户端来执行hub主机上的自动化测试脚本,下面我们就开始配置一下分布式测试运行环境

环境准备

其实hub主机和node节点可以同时配置在一台物理机上,但是为了模拟真实的测试环境,我准备了2台真实的物理机,当然你也可以使用一台物理机+虚拟机的方式练习

1. 准备2台处于同一个局域网下的物理机,保证2台物理机能够相互ping通

2.下载selenium-server-standalone包

3.作为node节点的物理机需要配置好浏览器和对应驱动,并把驱动程序加入环境变量

4.hub主机和node主机均需要配置java jdk 1.8 (切记本版,否则可能配置不成功)

问题

如果你的两台机器处于同一个网络,但是无法相互ping通,你可以尝试下面的办法解决

打开控制面板-打开防火墙设置-点击【高级设置】-点击【入站规则】找到下面两个规则并开启

下载selenium-server-standalone

访问官网 https://www.seleniumhq.org/download/ 下载 selenium-server-standalone

下载好selenium-server-standalone-3.141.59.jar包后,分别放到两台电脑的任意位置

配置浏览器驱动

浏览器驱动如何配置,请自行百度(谷歌的驱动可以从这里下载https://npm.taobao.org/mirrors/chromedriver),我后面主要使用的是firefox浏览器

安装JDk

https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-setup.html 我的这篇文章里面有安装jdk的教程,但是请注意jdk的版本

搭建环境

配置hub主机

我选择作为hub主机的地址为:192.168.1.103

打开cmd终端,并切换到selenium-server-standalone-3.141.59.jar所在的目录下,执行命令:java -jar selenium-server-standalone-3.141.59.jar -role hub

执行命令后,会初始化本机为hub服务器,自动分配一个ip地址(如图,这个地址是个虚拟地址,作为hub的主机地址,因为同一台机器可以同时作为hub和note,所以会自动生成一个虚拟地址),端口号默认为4444,当然你在初始化hub主机的时候也可以修改默认端口,添加-port=指定端口号即可

初始化完成后,我们可以访问http://192.168.24.1:4444:/grid/console来查看初始化的hub状态如图

配置node节点

我选择的node节点机器的地址为:192.168.1.102

同样打开cmd终端,并切换到selenium-server-standalone-3.141.59.jar所在的目录下,执行命令:

java -jar selenium-server-standalone-3.141.59.jar -role webdriver -browser "browserName=firefox,platform=WINDOWS" -hubHost 192.168.1.103(hub所在的主机地址)

如果你使用的浏览器是chrome,可能你需要执行这个命令(别问我为什么,我使用chrome浏览器的时候,使用上面的命令,只是修改了browserName=chrome,没有成功)

java -jar -Dwedriver.chrome.driver=driver所在的目录\chromedriver.exe selenium-server-standalone-3.141.59.jar -browser "browserName=chrome, version=75" -role node -hubHost 192.168.1.103

命令执行完毕后你会看到下面的输出信息

ok,现在我们再次访问一下hub主机的地址看下状态

右边就是我初始化成功后的远程node节点机器的配置,左边我也配置了一个,是在hub所在的主机配置的一个note节点

到这里,我们的分布式自动化测试环境就配置完成了,接下来开始编写我们的测试代码,看下是否能够在远程note机器上执行测试

测试脚本

测试脚本放在hub所在的机器(我们的目的就是控制远程note机器执行测试(打开浏览器执行测试),并不是hub所在机器执行(要不然还有啥意义呢?))

"""
------------------------------------
@Time : 2019/7/6 16:55
@Auth : linux超
@File : testCaseNodeB.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC class TestSeleniumGrid(unittest.TestCase): def setUp(self):
self.driver = webdriver.Remote(command_executor="http://192.168.1.102:16891/wd/hub",
desired_capabilities={"browserName": "firefox", # 浏览器名称
"platform": "WINDOWS"
}) def test_grid(self):
self.driver.get("https://www.baidu.com")
self.driver.find_element_by_id('kw').send_keys('linux超')
self.driver.find_element_by_id('su').click()
WebDriverWait(self.driver, 10). \
until(EC.visibility_of_element_located((By.XPATH, '//a[text()="https://www.cnblogs.com/"]')))
page_source = self.driver.page_source
self.assertIn('linux', page_source) def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()

执行过程

我们运行hub主机上的代码然后看一下note节点机器上执行的过程, 并注意看hub主机和note点击机器cmd终端的输出结果

执行过程中有一些警告信息,也不知道什么原因,我还没找到解决的办法,但是并不影响测试的执行,到此为止整个测试环境搭建就完成了

最后

搭建过程需要注意

1.浏览器和浏览器驱动版本要匹配,且添加到系统环境变量

2.初始化hub和node时的命令不要敲错,算这次我一共搭过2次环境, 之前2次折腾命令参数就折腾了好久(对一个参数选项不太理解)

3.不要被hub和node机器的ip搞晕,脚本中的要在哪里运行测试就要配置哪个node节点机器的地址 (command_executor="http://192.168.1.102:16891/wd/hub",而且要主要后面接的/wd/hub是固定的不要写错)

需要注意的差不多就这么多吧, 自己不手动配置一遍你也不会知道究竟会遇到什么问题

TODO

配置这个测试环境之后,我一直有个疑问,我的代码只能在一个node上的一个浏览器上执行,分布式分布式,这样的话还有啥意义呢?我的理解是应该能同时在不同的node机器上不同的浏览器上运行才符合这个概念,所以呢我试着使用python线程并发修改了几次代码也没有成功,试着找资料也没有解决我这个疑惑,也可能我理解的有问题,不管怎么样了,以后有了思路再更新这篇文章吧!

Selenium Grid分布式测试环境搭建的更多相关文章

  1. Selenium Grid分布式测试入门详解

    本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...

  2. selenium Grid2 分布式自动化测试环境搭建

    一.Selenium Server 环境配置 1.selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不用的浏览器,不同的操作系统上测试,而且比较多的 ...

  3. JMeter分布式测试环境搭建(禁用SSL)

    JMeter分布式环境,一台Master,一到多台Slave,Master和Slave可以是同一台机器. 前提条件: 所有机器,包括master和slave的机器: 1.运行相同版本的JMeter 2 ...

  4. selenium 结合 docker 构建分布式测试环境 (初学者视角)

    前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...

  5. 用docker搭建selenium grid分布式环境实践之路

    最近需要测试zoom视频会议,同时模拟100个人加入会议.经过了解,zoom提供了直接通过url链接加入会议的方式(只能通过chrome浏览器或者FireFox浏览器,因为用的协议是webrtc). ...

  6. 使用docker搭建selenium grid 分布式环境

    本文章只做docker搭建selenium grid 分布式环境步骤说明,对于selenium grid中的参数.流程.原理等不做说明.selenium grid的详细情况可查看官方文档https:/ ...

  7. selenium结合docker构建分布式测试环境

    selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...

  8. 总结Selenium自动化测试方法(二)测试环境搭建

    (接上期内容) 二.测试环境搭建 1.安装python 现在python3.0比python2.0多了一些改进的功能(详见http://zhidao.baidu.com/link?url=3sT1g7 ...

  9. selenium之多线程启动grid分布式测试框架封装(四)

    九.工具类,启动所有远程服务的浏览器 在utils包中创建java类:LaunchAllRemoteBrowsers package com.lingfeng.utils; import java.n ...

随机推荐

  1. 带农历日历的DatePicker控件!Xamarin控件开发小记

    原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePi ...

  2. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  3. HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详细的说明

      HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth具体指完全解释究竟哪里的距离scrollHeight: 获取对象的高度滚动. scrollLe ...

  4. 让你的sublime text写C代码 (sublime text 2 配置构建C开发环境)

    原则 1. 首先你要配置能够编译C++/C环境 2. window中配置该执行环境的环境变量,能够全局使用 3. sublime Text创建新的构建机制.并设置用改全局编译环境 具体过程 能够编译C ...

  5. aravel 之父 Taylor Otwell :我是如何工作的

    知名 PHP Web 开发框架 Laravel 之父 Taylor Otwell 发文描述了自己的日常工作状态:全职做 Laravel ,朝八晚五,使用 Sublime Text 3 写代码,终端使用 ...

  6. js 操作样式

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  7. WPF 中style文件的引用

    原文:WPF 中style文件的引用 总结一下WPF中Style样式的引用方法: 一,内联样式: 直接设置控件的Height.Width.Foreground.HorizontalAlignment. ...

  8. 使用ArcGIS Server发布我们的数据

    原文:使用ArcGIS Server发布我们的数据 引言 上一篇我们已经安装好了ArcGIS体系的服务软件,这一篇将介绍如何把我们自己的数据通过ArcGIS Server发布出去,并且能够通过Web页 ...

  9. ExtJS 折线图趟过的坑

    问题: 1.根据条件检索后绘制折线图,之前的坐标没有清除如图 解决方案: 在绘制之前,清空坐票: leftLine.surface.removeAll(); leftLine.redraw(false ...

  10. Qt之QSS(QTreeView)

    check 是选中 前面的指示器的状态 select 是选中 项目 item 的状态. http://blog.csdn.net/u011012932/article/details/52606662