分布式并发测试,Grid布满式测试入门详解

(一) 前言

Python+Selenium笔记(十一):配置selenium Grid,pythonselenium

(一) 前言

Selenium
Grid能够将测试分布在多少个概略或编造机器上,从而完毕布满情势或相互格局试行测试。

本条链接是官方的连带认证。

(二) Selenium Grid

粗粗正是以此意思(二个为主节点(HUB),N个子节点(NODE,操作系统+浏览器))

 亚洲必赢官网 1

亚洲必赢官网 2

 

(三) 情形布置

  1. 前提:已经安插相应的
    JDK景况(LINUX自带JDK意况(作者装的LINUX自带的是壹.8),WINDOWS要自身配置JDK蒙受(我装的是一.9))

  2. 下载 Selenium Standalone Server

 亚洲必赢官网 3

  1. 启动Selenium Grid server(hub)

Selenium Grid server(hub,也便是存放代码的那台Computer),切换成Selenium
Standalone所在的目录(直接在Selenium
Standalone所在的文本夹shift+鼠标右键,采纳在此地展开命令窗口,可能CD
路线),然后实践上边包车型大巴通令

java -jar selenium-server-standalone-<version>.jar -role hub

例如:java -jar selenium-server-standalone-3.9.1.jar -role hub

可以加 -port 指定端口号,默认4444

http://localhost:4444/grid/console 启动后用这个地址访问

亚洲必赢官网 4

亚洲必赢官网 5

  1. 配置node(节点)

(一)  
Node(也等于其余计算机或虚拟机情况,也足以一贯将hub所在的那台计算机增多为node),在系统变量path中丰硕相应的驱动文件的路子。(比如:将chromedriver所在的门路加多到path中,在此以前已经说过火狐、IE、谷歌(Google)浏览器境况的配备)

(二)   实施上面包车型客车授命

java -jar selenium-server-standalone-3.9.1.jar -role node -browser
“browserName=firefox,version=62,maxSession=3,platform=WINDOWS” -hub
-port 5555

说明:

browserName:浏览器名称

Version:浏览器版本

maxSession:帮助并发浏览器实例的数额

platform:操作系统

-hub:http:// (Selenium Grid server(hub)的IP)+运维时设置的端口号/
grid/register

-port :内定端口号

亚洲必赢官网 6

(三)  
要在1如既往计算机(或虚拟机)增添任何节点,再展开2个CMD窗口,运营方面包车型地铁下令就行了(记得修改浏览器新闻),记得同一Computer上端口号别重复。

(四)
条件布署好后如下图所示(作者Computer开着二个linux的虚拟机太卡了,有点浪费时间的痛感,不想弄了,不过相应和windows上的差别不会太大,有情状的能够试下增多path变量、在终点实施有关命令增添节点)

 亚洲必赢官网 7

(五) 演示(运营脚本会开采,直接在相相称的碰到中运营测试)

 1 import sys
 2 import unittest
 3 from selenium import webdriver
 4 from selenium.webdriver.common.action_chains import ActionChains
 5 class SearchTest(unittest.TestCase):
 6     #定义2个全局属性,没有外部参数时,使用默认值
 7     PLATFORM = "WINDOWS"
 8     BROWSER = "firefox"
 9     @classmethod
10     def setUpClass(cls):
11         #设置操作系统和浏览器
12         desired_caps = {}
13         desired_caps['platform'] = cls.PLATFORM
14         desired_caps['browserName'] = cls.BROWSER
15         #这里的IP就是HUB所在电脑的ip
16         cls.driver = webdriver.Remote('http://192.168.3.2:4444/wd/hub',desired_caps)
17         cls.driver.implicitly_wait(10)
18         cls.driver.maximize_window()
19         cls.driver.get("https://www.cnblogs.com/")
20         
21     def test_search_by_look(self):
22         seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')
23         #定位编程语言下的小类Python
24         seach_small =self.driver.find_element_by_xpath('//li/a[@href="/cate/python/"]')
25         ActionChains(self.driver).move_to_element(seach_class).perform()
26         seach_small.click()
27         #检查打开的网页标题是不是 Python - 网站分类 - 博客园
28         self.assertEqual(self.driver.title,"Python - 网站分类 - 博客园" )
29 
30     @classmethod
31     def tearDownClass(cls):
32         cls.driver.quit()
33 
34 if __name__ == '__main__':
35     #使用命令行运行脚本时,如果添加了参数,PLATFORM和BROWSER使用外部参数
36     if len(sys.argv)>1:
37         SearchTest.PLATFORM = sys.argv.pop()
38         SearchTest.BROWSER = sys.argv.pop()
39     #加verbosity=2参数,在命令行中显示具体的测试方法
40     unittest.main(verbosity=2)

(六) 未缓和的主题素材(单单配置情状是不够的)

1、 完毕多情形互相运营同1测试脚本

2、 得以完毕同一脚本在分化条件中并行运维

 

Grid,pythonselenium (壹) 前言 Selenium Grid
能够将测试布满在多少个大要或编造机器上,从而实现布满…

正文对Selenium Grid实行了全体的介绍,从意况计划到利用Selenium
Grid进行一回完整的多节点布满式测试。

Selenium Grid 是什么?

Selenium Grid
是1个足以方便的让您脚本运转在分歧的阳台以及差异的浏览器上的一个框架。Selenium
Grid 分一和二七个本子,个中Selenium Grid 贰的揭发还晚于Selenium
贰.0,相当于说Selenium Grid 二 并不是和Selenium 贰.0
一同公布的,不过Selenium Grid 二基本上补助Selenium 二.0的有所成效。

Selenium
Grid可以将测试布满在若干个大意或编造机器上,从而落成布满格局或相互格局试行测试。

运作条件为Windows 10,Selenium版本为
3.5.0,Chrome版本为6二,Firefox版本为56,IE版本为11。

Selenium Grid 基本结构

亚洲必赢官网 8

grid结构图.png

  如上海图书馆,Selenium Grid 由二个Hub节点和几何个Node节点组成。
在那之中Hub节点首要用于管理种种Node节点的登记及其状态,并接纳Selenium
Scripts脚本,然后转载给各类Node节点去施行,所以Hub自个儿节点是不试行脚本的,Hub是做脚本分发,真正推行脚本都以放于Node节点上。既然Hub
会分发脚本,那么免去了四个二个Node机器上去拷贝你脚本的分神啦。

那个链接是合法的有关说明。

1. Selenium Grid简介

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

经常,以下二种情景会供给选拔Selenium Grid:

一)
平常两个浏览器的包容性测试,即在不一致浏览器或不相同操作系统的浏览器中进行测试

二) 测试用例较多时,能够由此遍及式测试减弱测试实施时间

 

什么日期供给 Selenium Grid

在打听了何等是 Selenium Grid
和其宗旨结构后,那么大家初步关注大家曾几何时供给它吧?上面列出两点:

1. 当你的脚本需要在不同的系统和浏览器运行时,也就是测试需要考虑各种浏览器兼容性时。
2. 当你想缩短你的测试执行时间时。

当你从头思索地点五个难题时,那么能够考虑选拔Selenium Grid .

https://github.com/SeleniumHQ/selenium/wiki/Grid2

2. Selenium Grid结构

Selenium
Grid由2个着力hub及多个节点node组成(类似于任何遍布式系统的matser-slave),当中hub用来保管各样node的注册和气象消息,并且接受远程客户端代码的乞求调用,然后把请求再转载给node来施行。

亚洲必赢官网 9

 

 

怎么选择

留神:Selenium Grid
是用java开荒的框架,所以您想运营那一个框架,你须求有java蒙受。Java情状的搭建能够参照http://www.jianshu.com/p/74a5ea7fd369

(二) Selenium Grid

3. 条件计划

是因为Selenium Grid的hub及node运转时要求java情状,所以首先供给安装JDK。

 

下载jar包

下载地址:http://selenium-release.storage.googleapis.com/index.html
,采纳最新版本,举例写这几个作品时最新版本是②.5三,那么进入贰.5三文书夹下载
selenium-server-standalone-2.伍三.0.jar 文件便可。

分布式并发测试,Grid布满式测试入门详解。轮廓正是其一意思(三个为主节点(HUB),N个子节点(NODE,操作系统+浏览器))

3.1 JDK环境

一.
官方网站下载地址:

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

  2. 安装下载的JDK

  3. 安排连串意况变量

 

启动Hub 节点:

在调节台(终端)输入:java -jar selenium-server-standalone-2.53.0.jar
-role hub
出现就像是如下图音信便表示Hub运行成功:

亚洲必赢官网 10

hub运营成功.png

此时你能够浏览器展开
http://localhost:4444/grid/console
,能够看出Hub管理页面。

亚洲必赢官网 11

Paste_Image.png

点击 view config,能够查看到当下hub节点的片段布置暗中同意配置消息,例如:
port : 4444 那些是hub 默许的端口号;

**throwOnCapabilityNotPresent : true ** 暗许为true,表示近日hub只有在有node存在时,才会接受测试请求。为false 则反之;

capabilityMatcher :
org.openqa.grid.internal.utils.DefaultCapabilityMatcher

那是二个贯彻了CapabilityMatcher接口的类,默许指向org.openqa.grid.internal.utils.DefaultCapabilityMatcher该类用于落到实处grid在布满测试职务到相应node时所接纳的万分规则,借使想要更可靠的测试分配规则,那么就登记1个和睦定义的相配类;

**prioritizer : null **
那是多个达成了Prioritizer接口的类。设置grid实行test任务的事先逻辑;默以为null,那么些剧本先到不行先实行;

newSessionWaitTimeout : -1
暗中同意-1,即未有过期;钦赐三个新的测试session等待实行的间隔时间。即三个代理节点上前后1个测试中间的延时时间,单位为纳秒;

**browserTimeout : 0 **
浏览器无响应的过期时间,默感觉0表示并未有过期时间

 亚洲必赢官网 12

3.2 selenium-server-standalone下载

一.
selenium-release官方网址地方:

  1. 下载与本机selenium
    3.伍.0匹配的本子:selenium-server-standalone-三.五.0.jar

亚洲必赢官网 13

 

  1. 拷贝selenium-server-standalone-3.伍.0.jar至地面职业目录下,如D:\grid

修改 hub 的配置

想要修改 hub 的布署有二种艺术。

亚洲必赢官网 14

3.3 webdriver下载

通过命令修改

举个例子假使小编的
444肆端口被别的程序占用了,作者想修改私下认可的端口为444伍,则如下:
java -jar selenium-server-standalone-2.53.0.jar -role hub -port 4445

 

3.3.1 IE

一)
依然在刚刚的页面:

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

亚洲必赢官网 15

因而Json文件修改配置:

  1. 新建个json格式的公文,内容如下(那里只有修改了maxSession的布署,暗中同意是5),并放于跟Grid
    jar包同一目录:
    { "host": null, "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "prioritizer": null, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "throwOnCapabilityNotPresent": true, "nodePolling": 5000, "cleanUpCycle": 5000, "timeout": 300000, "browserTimeout": 0, "maxSession": 10 }
  2. 推行命令:java -jar selenium-server-standalone-二.伍三.0.jar -role hub
    -hubConfig hub.json

那时候再到 Grid Console 页面查看,maxSession 参数已经修改成 10.

(三) 情状安插

3.3.2 Chrome

一)
下载地址:

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

node 节点Selenium 情状须要

在增进node节点前,大家先关怀下,node 节点对境遇须求:

1. node 节点必须要有 java 环境
2. node 节点跟hub 节点机器间可以互相 ping 通。(不通时关闭防火墙和安全软件再试试)
3. node 节点负责执行Selenium 脚本,所以必须有Selenium 环境(脚本语言对应的环境如java, 各个浏览器及其对应的driver)
  1. 前提:已经布署相应的
    JDK碰到(LINUX自带JDK蒙受(作者装的LINUX自带的是一.八),WINDOWS要团结配置JDK处境(笔者装的是一.玖))

  2. 下载 Selenium Standalone
    Server

3.3.3 Firefox

1) 下载地址:

二) 下载与系统及浏览器版本相称的driver版本:geckodriver-v0.1玖.1-win6四.zip

 亚洲必赢官网 16

 

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

上述selenium-server-standalone
及webdriver,我已上传至百度网盘,下载链接:
密码: ygdy

添加 node 节点

假如你是跟hub同一台机械中增加能够一贯在调整台(终端)输入如下命令:
java -jar selenium-server-standalone-2.53.0.jar -role node

一旦您想在别的机器上增加node节点则调整台(终端)输入如下命令:
java -jar selenium-server-standalone-2.53.0.jar -role node -hub
http://192.168.1.110:4444/grid/register

增多完节点后,能够在 Grid Console
页面上查看到已经登记进来的node节点音信和配置。如下图:

亚洲必赢官网 17

Paste_Image.png

补给:使用 -role node 注册表示这几个node节点既能够协助Selenium Remote
Control 也支撑Webdriver
java -jar selenium-server-standalone-二.伍叁.0.jar -role rc
//注册的节点仅补助Selenium Remote Control
java -jar selenium-server-standalone-2.五3.0.jar -role wd
//注册的节点仅帮衬WebDriver

 亚洲必赢官网 18

4. Selenium Grid启动

修改 node 配置

1如既往node的安排有三种方法

  1. 启动Selenium Grid server(hub)

4.1 启动hub

hub运行命令如下:

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

里面
-role内定剧中人物为hub,通过下图能够看看:hub已运用暗许444四端口运转成功,且node能够因而进展挂号

亚洲必赢官网 19

 

透过命令修改

java -jar selenium-server-standalone-2.53.0.jar -role rc -port 6666

Selenium Grid server(hub,作为主导节点的计算机),切换成Selenium
Standalone所在的目录(直接在Selenium
Standalone所在的公文夹shift+鼠标右键,选取在此间打开命令窗口,或然CD
路线),然后实行上面包车型客车指令

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

亚洲必赢官网 20

同理大家其余运维三个 node(使用端口号分别为5556/555柒):

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

 

此刻张开页面,能够看来大家运转的八个node:

亚洲必赢官网 21

由此json文件修改(三.X版本请参见文章最终配置)

比方说新建四个node.json文件,如下内部存款和储蓄器,并放于Grid 同级目录下
{ "capabilities": [ { "browserName": "chrome", "maxInstances": 5, "platform": "WINDOWS", "version":"51" }, { "browserName": "firefox", "maxInstances": 6, "platform": "WINDOWS", "version":"46.0.1" }, { "browserName": "internet explorer", "maxInstances": 2, "platform": "WINDOWS", "webdriver.ie.driver": "IEDriverServer.exe" } ], "configuration": { "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 5, "port": 5555, "register": true, "registerCycle": 5000, "hub": "http://192.168.84.209:4444" } }
重大参数表明:
**”browserName”: “chrome” **本条很要紧,表示你注册的浏览器

“maxInstances”: 5 那一个参数表示最多运转该浏览器的个数

“webdriver.ie.driver”: “IEDriverServer.exe”
每一种浏览器driver放置的地方,建议放跟Grid 同级目录下

试行命令:
java -jar selenium-server-standalone-2.53.0.jar -role node -nodeConfig
node.json -hub
http://192.168.84.209:4444/grid/register
末了查看Grid Console 页面,展现如下node节点消息:

亚洲必赢官网 22

Paste_Image.png

到此结束,我们曾经布置好Hub 和内需的三个Node
节点,下去我们供给起先编写制定测试代码

java -jar selenium-server-standalone-<version>.jar -role hub

例如:java -jar selenium-server-standalone-3.9.1.jar -role hub

可以加 -port 指定端口号,默认4444

http://localhost:4444/grid/console 启动后用这个地址访问

4.三 越来越好的起步方法 — 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
    start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5556 -hub
    start java -jar selenium-server-standalone-3.5.0.jar -role node -port 5557 -hub

一) 第二行是跻身并修改当前目录为寄放
selenium-server-standalone-三.伍.0.jar的目录:D:\grid

二) 前面叁行stat java…是分别张开新的cmd窗口用以运行hub及node

 

  1. 双击selenium_grid.bat就能够运维hub及node

 

测试代码:

在编排代码此前我们先轻便通晓下五个工具Maven 和 TestNG。

Maven:是二个等级次序管理工科具,能够用来项目创设打包等,仍是能够用于项目依赖包管理。
亚洲必赢官网 ,TestNG:
是三个精锐的测试框架,设计灵感来源于junit,但优于junit,它提供了很强劲的疏解,便于大家对case的各类操作。

亚洲必赢官网 23

四.四 更加多选择

关于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

新建 Maven 工程

笔者们能够透过IDEA来新建一个Maven
工程,新建进度能够参考http://www.jianshu.com/p/6ca7bbcdf2dd
, 并在pom.xml 文件增添selenium 和 TestNG的注重性包如下:

 <!-- http://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.0</version>
        </dependency>

        <!-- http://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.10</version>
        </dependency>

亚洲必赢官网 24

5. Selenium Grid 遍布式测试脚本

上边,大家编辑三个Selenium
Grid自动化测试脚本,分别在三个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')

 

编写脚本

比方作者想在中距离的node
节点(19二.16八.8四.19:5555)机器上运营Chrome/IE/firefox浏览器,并开荒百度页面,那里我们必要依据DesiredCapabilities类来钦点选用哪个浏览器,用RemoteWebDriver
来促成远程运营,具体代码如下:

    //    启动192.168.84.209:5555 node节点的Chrome
    @Test
    public void testChrome() throws MalformedURLException, InterruptedException {
        DesiredCapabilities chromeDC = DesiredCapabilities.chrome();
        WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.209:5555/wd/hub"), chromeDC);
        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        driver.quit();
    }

    //    启动192.168.84.19:5555 node节点的firefox
    @Test
    public void testFF() throws MalformedURLException, InterruptedException {
        DesiredCapabilities firefoxDC = DesiredCapabilities.firefox();
        WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.19:5555/wd/hub"), firefoxDC);
        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        driver.quit();
    }

    //    启动192.168.84.19:5555 node节点的IE
    @Test
    public void testIE() throws MalformedURLException, InterruptedException {
        DesiredCapabilities ieDC = DesiredCapabilities.internetExplorer();
        WebDriver driver = new RemoteWebDriver(new URL("http://192.168.84.19:5555/wd/hub"), ieDC);
        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        driver.quit();
    }

补给
DesiredCapabilities类,除了能够钦命浏览器的称号还足以内定平台和浏览器版本以及浏览器协助的其余功效

从上边的脚本大家早已大约知道如若去钦定有些脚本在有些系统和浏览器中运营,但是日常大家的case基本上希望的是装有的case能够在盼望的阳台和浏览器中火速运维,那里实在有八个必要,3个是兼具的本子能都在钦定浏览器中运维另一个正是硬着头皮飞速运营。

先来缓慢解决第3个要求:借使现行反革命本人有个测试脚本完毕了
”展开百度分界面,并输入页面title“,作者盼望他能够在A机器(1九二.168.八四.20九)上的chrome
浏览器 和
firefox浏览器运维,在B(192.168.84.1九)机器上的IE浏览器运转。那么大家代码能够如下设计思路:

1. 通过TestNG 提供的@DataProvider 实现数据驱动(也可以通过.xml做数据来源去实现)
2. 通过不同参数,把脚本分配到不同的node上的运行

具体落到实处代码如下:

    // 通过TestNG 提供的注解,实现数据驱动
    @DataProvider(name = "data")
    public Object[][] data() {
        return new Object[][]{{"http://192.168.84.209:5555", "chrome"},
                {"http://192.168.84.209:5555", “firefox"},
                {"http://192.168.84.19:5555", "ie"}};
    }

    /**
     * @param nodeURL node 节点的地址
     * @param browser node 节点的浏览器
     * @throws MalformedURLException
     */
    @Test(dataProvider = "data") // 获取对应的数据源
    public void openBaiduPageTest(String nodeURL, String browser) throws MalformedURLException {
        DesiredCapabilities desiredCapabilities;
//        判断要打开的浏览器

        if (browser .equals("chrome")) {
            desiredCapabilities = DesiredCapabilities.chrome();
        } else if (browser .equals( "ie")) {
            desiredCapabilities = DesiredCapabilities.internetExplorer();
        } else {
            desiredCapabilities = DesiredCapabilities.firefox();
        }

//        拼接处要执行脚本的node 节点地址
        String url = nodeURL + "/wd/hub";
        WebDriver driver = new RemoteWebDriver(new URL(url), desiredCapabilities);
//        打开百度
        driver.get("http://www.baidu.com");
        System.out.println(browser + driver.getTitle());
//        关闭浏览器
        driver.quit();
    }

须要一搞定了,我们再来思考下需求二:怎样尽量快快捷运输维,究竟现在差不离研究开发集团都以走高速,若是等你脚本实践几钟头大概越来越长日子,那差不多要命。消除思路能够透过并行试行case脚本来消除。TestNG不仅仅能提供数据驱动的方法,也提供了多样油但是生方式,那样就很好化解了小编们case并行实践的渴求,具体消除如下:
在类型中新建个.xml 文件,如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite" parallel="methods" thread-count=“3">
  <test name="Selenium_Grid_Demo">
    <classes>
      <class name="com.grid.demo.GridDemo"/>
    </classes>
  </test> <!-- Selenium_Grid_Demo -->
</suite> <!-- Default Suite -->

中间 <suite name=”Default Suite” parallel=”methods”
thread-count=”一”> 中的 thread-count 参数值就是出新的进度数,parallel
的参数表示通过哪一类方法张开并发能够是 methods , classes , test 。
xml里面越来越多的配备风乐趣的能够百度问询。

譬如说小编的测试Grid德姆o
类里面有一个case了,作者也新建了上述的.xml文件,那么自个儿运营该xml文件汇合到这四个case同时实施

亚洲必赢官网 25

运作结果.png

  1. 配置node(节点)

6. 广大难点

本子运营进度中若IE浏览器报错找不到成分,而Chrome及Firefox浏览器平常,原因是IE浏览器的珍视情势未有休息:

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

二) 在“Internet选项”中,切换来“安全”选项,撤销“启用爱慕方式”的勾选

叁) 并且上边三个区域的爱戴情势都亟需关闭

亚洲必赢官网 26

 

通过Jenkins 推行脚本

Jenkins
是个CI(持续集成)工具,功用十二分强劲,插件也十分多,上边简介如何把曾经编写制定好的脚本放到Jenkins推行。

1. 搭建Jenkins 环境 (百度很多,不详细说明)
2. 修改本地Maven 项目的pom.xml 文件,添加如下插件:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.17</version>
                <configuration>
                    <suiteXmlFiles>
                        <!--要执行的testng的.xml文件路径-->
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>

1. 打开Jenkins平台,新建一个Maven,便可以

(壹)  
Node(也便是任何Computer或虚拟机情形,也能够一贯将hub所在的那台微型Computer增添为node),在系统变量path中增加相应的驱动文件的路径。(举个例子:将chromedriver所在的路子增添到path中,从前已经说过火狐、IE、谷歌(Google)浏览器境遇的布署)

Selenium Grid 的GUI管理工科具

最终推荐七个Grid的GUI 管理工科具:

1. Jenkins 的Selenium Plugin 插件,可以在Jenkins插件中找到

亚洲必赢官网 27

Paste_Image.png

安装达成后会在导航中增多Grid的进口。

亚洲必赢官网 28

Paste_Image.png

2. VisGrid 

下载地址:http://www.codoid.com/products/view/2/30

亚洲必赢官网 29

VisGrid.png

(二)   实践下边的命令

补充 (17.07.27更新)

不久前因为接手四个类型,又必要再行搭建Grid
,而这时的Webdriver已经是叁.x本子了,同时大家看到的Grid的selenium-server-standalone
jar包也进级到了三.X
版本,即使基本用法保持同等,然而在铺排Node的json文件时,有点小改换,所以固然你是用三.X版本的Grid那么请参考:
https://github.com/SeleniumHQ/selenium/blob/master/java/server/src/org/openqa/grid/common/defaults/DefaultNodeWebDriver.json
中的配置,同时想看Grid的官方接济请参见:
https://github.com/SeleniumHQ/selenium/wiki/Grid2

聊起底自个儿随手贴出官方给出的暗许Node Json配置文件:

{
  "capabilities":
  [
    {
      "browserName": "firefox",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    },
    {
      "browserName": "chrome",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    },
    {
      "browserName": "internet explorer",
      "maxInstances": 1,
      "seleniumProtocol": "WebDriver"
    }
  ],
  "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
  "maxSession": 5,
  "port": 5555,
  "register": true,
  "registerCycle": 5000,
  "hub": "http://localhost:4444",
  "nodeStatusCheckTimeout": 5000,
  "nodePolling": 5000,
  "role": "node",
  "unregisterIfStillDownAfter": 60000,
  "downPollingLimit": 2,
  "debug": false,
  "servlets" : [],
  "withoutServlets": [],
  "custom": {}
}

java -jar selenium-server-standalone-3.9.1.jar -role node -browser
“browserName=firefox,version=62,maxSession=3,platform=WINDOWS” -hub
-port 5555

说明:

browserName:浏览器名称

Version:浏览器版本

maxSession:支持并发浏览器实例的多少

platform:操作系统

-hub:http:// (Selenium Grid server(hub)的IP)+运行时设置的端口号/
grid/register

-port :钦定端口号

亚洲必赢官网 30

(叁)  
要在同样计算机(或虚拟机)增添别的节点,再张开1个CMD窗口,运行方面包车型客车指令就行了(记得修改浏览器新闻),记得同1计算机上端口号别重复。

(四)
际遇安顿好后如下图所示(作者Computer开着三个linux的虚拟机太卡了,有点浪费时间的痛感,不想弄了,可是相应和windows上的反差不会太大,有景况的能够试下增添path变量、在终端执行相关命令增添节点)

 亚洲必赢官网 31

(五) 以身作则(运维脚本会发现,直接在相相配的景况中运转测试)

 1 import sys
 2 import unittest
 3 from selenium import webdriver
 4 from selenium.webdriver.common.action_chains import ActionChains
 5 class SearchTest(unittest.TestCase):
 6     #定义2个全局属性,没有外部参数时,使用默认值
 7     PLATFORM = "WINDOWS"
 8     BROWSER = "firefox"
 9     @classmethod
10     def setUpClass(cls):
11         #设置操作系统和浏览器
12         desired_caps = {}
13         desired_caps['platform'] = cls.PLATFORM
14         desired_caps['browserName'] = cls.BROWSER
15         #这里的IP就是HUB所在电脑的ip
16         cls.driver = webdriver.Remote('http://192.168.3.2:4444/wd/hub',desired_caps)
17         cls.driver.implicitly_wait(10)
18         cls.driver.maximize_window()
19         cls.driver.get("https://www.cnblogs.com/")
20         
21     def test_search_by_look(self):
22         seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')
23         #定位编程语言下的小类Python
24         seach_small =self.driver.find_element_by_xpath('//li/a[@href="/cate/python/"]')
25         ActionChains(self.driver).move_to_element(seach_class).perform()
26         seach_small.click()
27         #检查打开的网页标题是不是 Python - 网站分类 - 博客园
28         self.assertEqual(self.driver.title,"Python - 网站分类 - 博客园" )
29 
30     @classmethod
31     def tearDownClass(cls):
32         cls.driver.quit()
33 
34 if __name__ == '__main__':
35     #使用命令行运行脚本时,如果添加了参数,PLATFORM和BROWSER使用外部参数
36     if len(sys.argv)>1:
37         SearchTest.PLATFORM = sys.argv.pop()
38         SearchTest.BROWSER = sys.argv.pop()
39     #加verbosity=2参数,在命令行中显示具体的测试方法
40     unittest.main(verbosity=2)

(六) 未减轻的难点(单单配置碰到是不够的)

1、 得以达成多意况互相运转同一测试脚本

2、
得以落成几个测试脚本并行运转(比方几百个测试脚本如若二个个运营以来,要用十分短日子)

 

网站地图xml地图