Selenium Grid 分布式测试入门

本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试。

运行环境为Windows 10,Selenium版本为 3.5.0,Chrome版本为62,Firefox版本为56,IE版本为11。

1. Selenium Grid简介

Selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,即分布式测试。

通常,以下两种情况会需要使用Selenium Grid:

1) 通常多个浏览器的兼容性测试,即在不同浏览器或不同操作系统的浏览器中进行测试

2) 测试用例较多时,可以通过分布式测试减少测试执行时间

2. Selenium Grid结构

Selenium Grid由一个中心hub及多个节点node组成(类似于其他分布式系统的matser-slave),其中hub用来管理各个node的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求再转发给node来执行。

3. 环境准备

由于Selenium Grid的hub及node启动时需要java环境,所以首先需要安装JDK。

3.1 JDK环境

1. 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

2. 选择Java SE 8u151/ 8u152,点击JDK下载

3. 安装下载的JDK

4. 配置系统环境变量

3.2 selenium-server-standalone下载

1. selenium-release官网地址:http://selenium-release.storage.googleapis.com/index.html

2. 下载与本机selenium 3.5.0匹配的版本:selenium-server-standalone-3.5.0.jar

2. 拷贝selenium-server-standalone-3.5.0.jar至本地工作目录下,如D:\grid

3.3 webdriver下载

3.3.1 IE

1) 还是在刚才的页面:http://selenium-release.storage.googleapis.com/index.html?path=3.5/

2) 下载与selenium版本、系统均匹配的IEDriver版本:IEDriverServer_Win32_3.5.0.zip

3.3.2 Chrome

1) 下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

2) 下载与系统及浏览器版本匹配的driver版本:chromedriver_win32.zip

3.3.3 Firefox

1) 下载地址:https://github.com/mozilla/geckodriver/releases

2) 下载与系统及浏览器版本匹配的driver版本:geckodriver-v0.19.1-win64.zip

driver下载完成解压后,分别拷贝IEDriverServer.exe,geckodriver.exe,chromedriver.exe至Python安装路径(如C:\Python27\)下即可

上述selenium-server-standalone 及webdriver,我已上传至百度网盘,下载链接: https://pan.baidu.com/s/1i4MBpXF 密码: ygdy

4. Selenium Grid启动

4.1 启动hub

hub启动命令如下:

java -jar selenium-server-standalone-3.5.0.jar -role hub

其中 -role指定角色为hub,通过下图可以看到:hub已使用默认4444端口启动成功,且node可以通过http://localhost:4444/grid/register/进行注册

4.2 启动node

node启动命令如下:

java -jar selenium-server-standalone-3.5.0.jar -role node -port 5555 -hub http://localhost:4444/grid/register

其中 -role指定角色为node, -port指定端口为 5555, -hub指定连接hub地址,通过下图可以看到node已成功连接hub

同理我们另外启动两个 node(使用端口号分别为5556/5557):

java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub http://localhost:4444/grid/register
java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub http://localhost:4444/grid/register

此时打开页面http://localhost:4444/grid/console,可以看到我们启动的三个node:

4.3 更好的启动方法 — bat脚本

1. 新建一个文件selenium_grid.bat,写入我们刚才启动hub及node的命令:

cd /d D:\grid
start java -jar selenium-server-standalone-3.5.0.jar -role hub
start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5555 -hub http://localhost:4444/grid/register
start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub http://localhost:4444/grid/register
start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub http://localhost:4444/grid/register

1) 第一行是进入并修改当前目录为存放 selenium-server-standalone-3.5.0.jar的目录:D:\grid

2) 后面三行stat java...是分别打开新的cmd窗口用以启动hub及node

2. 双击selenium_grid.bat即可启动hub及node

4.4 更多选项

关于Selenium Grid更多命令选项,可运行--help查看:

d:\grid>java -jar selenium-server-standalone-3.5.0.jar --help
Usage: <main class> [options]
  Options:
    --version, -version
       Displays the version and exits.
       Default: false
    -browserTimeout
       <Integer> in seconds : number of seconds a browser session is allowed to
       hang while a WebDriver command is running (example: driver.get(url)). If the
       timeout is reached while a WebDriver command is still processing, the session
       will quit. Minimum value is 60. An unspecified, zero, or negative value means
       wait indefinitely.
       Default: 0
    -debug
       <Boolean> : enables LogLevel.FINE.
       Default: false
    -enablePassThrough
       <Boolean>: Whether or not to use the experimental passthrough mode.
       Defaults to true.
       Default: true
    -jettyThreads, -jettyMaxThreads
       <Integer> : max number of threads for Jetty. An unspecified, zero, or
       negative value means the Jetty default value (200) will be used.
    -log
       <String> filename : the filename to use for logging. If omitted, will log
       to STDOUT
    -port
       <Integer> : the port number the server will use.
       Default: 4444
    -role
       <String> options are [hub], [node], or [standalone].
       Default: standalone
    -timeout, -sessionTimeout
       <Integer> in seconds : Specifies the timeout before the server
       automatically kills a session that hasn‘t had any activity in the last X seconds. The
       test slot will then be released for another test to use. This is typically
       used to take care of client crashes. For grid hub/node roles, cleanUpCycle
       must also be set.
       Default: 1800

5. Selenium Grid 分布式测试脚本

下面,我们编写一个Selenium Grid自动化测试脚本,分别在3个node上运行Chrome,Firefox及IE浏览器,执行WEB页面自动化测试。

示例脚本如下:

# coding:utf-8

from selenium.webdriver import Remote
import time

# 定义node_hub与浏览器对应关系
nodes = {
    ‘http://127.0.0.1:5555/wd/hub‘: ‘chrome‘,
    ‘http://127.0.0.1:5556/wd/hub‘: ‘internet explorer‘,
    ‘http://127.0.0.1:5557/wd/hub‘: ‘firefox‘
}

# 通过不同的浏览器执行测试脚本
for host, browser in nodes.items():
    print(host, browser)
    # 调用remote方法
    driver = Remote(command_executor=host,
                    desired_capabilities={‘platform‘: ‘ANY‘, ‘browserName‘: browser, ‘version‘: ‘‘, ‘javascriptEnabled‘: True})

    # 打开百度首页并搜索词语,最后判断搜索跳转页面标题是否含有搜索词
    wd = ‘lovesoo‘
    driver.get(‘https://www.baidu.com‘)
    driver.find_element_by_id("kw").send_keys(wd)
    driver.find_element_by_id("su").click()
    time.sleep(1)
    assert wd in driver.title, ‘{0} not in {1}‘.format(wd, driver.title.encode(‘utf-8‘))
    driver.quit()

运行结果如下:

(‘http://127.0.0.1:5555/wd/hub‘, ‘chrome‘)
(‘http://127.0.0.1:5557/wd/hub‘, ‘firefox‘)
(‘http://127.0.0.1:5556/wd/hub‘, ‘internet explorer‘)

6. 常见问题

脚本运行过程中若IE浏览器报错找不到元素,而Chrome及Firefox浏览器正常,原因是IE浏览器的保护模式没有关闭:

1) 打开IE浏览器,在浏览器的菜单栏上点击“工具”选项,然后点击“Internet选项”

2) 在“Internet选项”中,切换到“安全”选项,取消“启用保护模式”的勾选

3) 并且上面四个区域的保护模式都需要关闭

时间: 2024-11-06 11:50:31

Selenium Grid 分布式测试入门的相关文章

Selenium Grid分布式测试入门详解

本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chrome版本为62,Firefox版本为56,IE版本为11. 1. Selenium Grid简介 Selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,即分布式测试. 通常,以下两种情况会需要使用Selenium Grid: 1) 通常多个浏览器的兼容性测试,即在不同浏览器或不同

Selenium grid 分布式测试搭建

应领导要求使用 selenium grid 搭建分布式测试平台,于是有了以下操作: 第一步:准备2台电脑,且2台电脑都安装好jdk,都准备好selenium-server-standalone-2.40.0.jar,IEDriver, ChromeDriver等工具,注意chrome版本与chromedriver需要匹配,详见我的另一篇博客:http://www.cnblogs.com/cherrysu/p/7815245.html 第二步:其中一台电脑作为hub,也就是老大,另一台作为node

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

九.工具类,启动所有远程服务的浏览器 在utils包中创建java类:LaunchAllRemoteBrowsers package com.lingfeng.utils; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set;

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

一.设计思路 在国内市场上,IE内核的浏览器占据了绝大部分的市场份额,那么此次框架封装将进行IE系列的浏览器进行多线程并发执行分布式测试的封装. 运行时主进程与多线程关系如下: 运行线程通俗的说就是我们用来跑用例的线程,其中<监控线程1>用来监控<运行线程1>的运行状态. 二.前期准备 1.创建一个java工程. 2.导入selenium.dom4j.log4j相关jar包 可到网上自行寻找jar包,也可到我云盘中下载,地址: selenium jar 以及源码jar :http:

selenium grid(分布式)

前言 原文:https://blog.csdn.net/real_tino/article/details/53467406 Selenium grid是用来分布式执行测试用例脚本的工具,比如测试人员经常要测试多浏览器的兼容性,那就可以用到grid了. 一.使用grid所需要的文件 1.Selenium server(即selenium-server-standalone-x.xx.x.jar) 下载对应版本http://selenium-release.storage.googleapis.c

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

七.工具类,线程监控器类创建 utils包中,创建java类:RemoteThreadStatusMonitor.java package com.lingfeng.utils; /** * 此监控器方法很重要,如果没有,那么将导致jvm退出,所有远程工作的线程全部抛出异常. * @author 凌风 * */ public class RemoteThreadStatusMonitor implements Runnable { private String driverName; priva

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

五.domain类创建 在domain包中创建类:RemoteLanchInfo.java 用来保存启动信息. package com.lingfeng.domain; public class RemoteLanchInfo { private String id; private String name; private String address; public String getId() { return id; } public void setId(String id) { th

使用selenium grid分布式执行之一

目前ui框架会做一个更新,把原有的Jenkins分布式方式换成grid方式,换成grid方式有两个好处,1.grid的资源占用比Jenkins的jnlp占用资源少 2.grid可控制不同浏览器同时跑 看很多网上跑自己的案例都很顺,想直接拿过来用,中间遇到很多问题,发现自己的电脑,启动多个浏览器后,只会执行1个浏览器,读取数据库中的控件,报空指针问题等,类似并发的问题,最开始怀疑testng多线程问题,折腾了一天,发现是因为我们设计模式问题,并发中driver被覆盖了,哎,,,之后并发有遇到很多问

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

最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具软件的研发工作,积累了一些经验,在此与大家做一下分享,也算是做一个总结吧,希望能给大家带来启发和帮助.由于业界没有成熟的解决方案可供参考,本人在研究过程中也是摸着石头过河,纰漏之处在所难免,如果大家有更好的方案,敬请不吝赐教. 分布式并行执行用例需求背景 公司的产品属于web app,采用的是Robot Framework + Selenium2Library