【4858.com】分布式并发测试,Grid分布式测试入门详解

By admin in 4858.com on 2019年4月8日

(一) 前言

【4858.com】分布式并发测试,Grid分布式测试入门详解。Python+Selenium笔记(十一):配置selenium Grid,pythonselenium

(一) 前言

Selenium
Grid能够将测试分布在若干个大体或编造机器上,从而完成分布情势或相互方式执行测试。

那么些链接是官方的相关认证。

(二) Selenium Grid

大约就是以此意思(四个为主节点(HUB),N个子节点(NODE,操作系统+浏览器))

 4858.com 1

4858.com 2

 

(三) 条件陈设

  1. 前提:已经配备相应的
    JDK环境(LINUX自带JDK环境(我装的LINUX自带的是壹.8),WINDOWS要本身配置JDK环境(笔者装的是一.九))

  2. 下载 Selenium Standalone Server

 4858.com 3

  1. 启动Selenium Grid server(hub)

Selenium Grid server(hub,也正是存放在代码的那台总计机),切换成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 启动后用这个地址访问

4858.com 4

4858.com 5

  1. 配置node(节点)

(一)  
Node(约等于别的计算机或虚拟机环境,也能够一向将hub所在的这台电脑添加为node),在系统变量path中增进相应的驱动文件的路径。(例如:将chromedriver所在的门径添加到path中,此前曾经说过火狐、IE、谷歌(谷歌(Google))浏览器环境的布署)

(2)   执行下边包车型地铁吩咐

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 :钦点端口号

4858.com 6

(叁)  
要在相同电脑(或虚拟机)添加别的节点,再打开3个CMD窗口,运转方面包车型客车指令就行了(记得修改浏览器消息),记得同一电脑上端口号别重复。

(四)
环境安插好后如下图所示(笔者电脑开着贰个linux的虚拟机太卡了,有点浪费时间的感觉到,不想弄了,可是相应和windows上的出入不会太大,有环境的能够试下添加path变量、在终端履行有关命令添加节点)

 4858.com 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实行2遍完整的多节点分布式测试。

Selenium Grid 是什么?

Selenium Grid
是三个足以便宜的让您脚本运营在差别的平台以及差异的浏览器上的三个框架。Selenium
Grid 分1和二多少个本子,个中Selenium Grid 贰的公布还晚于Selenium
二.0,也等于说Selenium Grid 二 并不是和Selenium 2.0
一起发表的,然则Selenium Grid 2基本上协理Selenium 2.0的享有效能。

Selenium
Grid能够将测试分布在若干个大体或编造机器上,从而达成分布格局或相互格局执行测试。

运作环境为Windows 十,Selenium版本为
叁.伍.0,Chrome版本为6贰,Firefox版本为5陆,IE版本为1一。

Selenium Grid 基本组织

4858.com 8

grid结构图.png

  如上海体育场所,Selenium Grid 由3个Hub节点和几何个Node节点组成。
个中Hub节点首要用于管理各类Node节点的登记及其状态,并收取Selenium
Scripts脚本,然后转载给各样Node节点去执行,所以Hub自身节点是不执行脚本的,Hub是做脚本分发,真正实施脚本都以放于Node节点上。既然Hub
会分发脚本,那么免去了3个3个Node机器上去拷贝你脚本的劳动啦。

这些链接是合法的连锁注明。

1. Selenium Grid简介

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

普通,以下两种意况会须要动用Selenium Grid:

一)
平常四个浏览器的兼容性测试,即在不一样浏览器或差异操作系统的浏览器中展开测试

2) 测试用例较多时,能够由此分布式测试减弱测试执行时间

 

什么时候要求 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来实施。

4858.com 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三,那么进入2.伍三文件夹下载
selenium-server-standalone-二.伍3.0.jar 文件便可。

大约正是那些意思(1个着力节点(HUB),N个子节点(NODE,操作系统+浏览器))

3.1 JDK环境

一.
官网下载地址:

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

  2. 设置下载的JDK

  3. 布局连串环境变量

 

启动Hub 节点:

在控制台(终端)输入:java -jar selenium-server-standalone-二.伍三.0.jar
-role hub
并发类似如下图新闻便表示Hub运维成功:

4858.com 10

hub运营成功.png

此刻你能够浏览器打开
http://localhost:4444/grid/console
,能够看到Hub管理页面。

4858.com 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时所选拔的相称规则,假使想要越来越精确的测试分配规则,那么就报了名2个本身定义的相配类;

**prioritizer : null **
那是三个落到实处了Prioritizer接口的类。设置grid执行test职务的事先逻辑;默许为null,那多少个剧本先到分外先进行;

newSessionWaitTimeout : -1
暗中认可-1,即未有过期;钦定二个新的测试session等待执行的间隔时间。即二个代理节点上前后3个测试中间的延时时间,单位为纳秒;

**browserTimeout : 0 **
浏览器无响应的超时时间,暗许为0表示未有过期时间

 4858.com 12

3.2 selenium-server-standalone下载

一.
selenium-release官网地点:

  1. 下载与本机selenium
    3.5.0相称的版本:selenium-server-standalone-3.5.0.jar

4858.com 13

 

  1. 拷贝selenium-server-standalone-三.五.0.jar至地方工作目录下,如D:\4858.com ,grid

修改 hub 的配置

想要修改 hub 的配置有两种办法。

4858.com 14

3.3 webdriver下载

因此命令修改

譬假如是笔者的
444四端口被其他程序占用了,作者想修改暗许的端口为44四伍,则如下:
java -jar selenium-server-standalone-2.53.0.jar -role hub -port 4445

 

3.3.1 IE

1)
照旧在刚刚的页面:

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

4858.com 15

由此Json文件修改配置:

  1. 新建个json格式的公文,内容如下(那里唯有修改了maxSession的配备,暗中同意是伍),并放于跟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-贰.53.0.jar -role hub
    -hubConfig hub.json

此刻再到 Grid Console 页面查看,maxSession 参数已经修改成 十.

(三) 环境安排

3.3.2 Chrome

1)
下载地址:

2) 下载与系统及浏览器版本相配的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玖.壹-win6四.zip

 4858.com 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

万1您想在别的机器上丰富node节点则控制台(终端)输入如下命令:
java -jar selenium-server-standalone-2.53.0.jar -role node -hub
http://192.168.1.110:4444/grid/register

添加完节点后,能够在 Grid Console
页面上查看到已经登记进来的node节点新闻和安插。如下图:

4858.com 17

Paste_Image.png

补偿:使用 -role node 注册表示那几个node节点既能够援助Selenium Remote
Control 也支撑Webdriver
java -jar selenium-server-standalone-二.5三.0.jar -role rc
//注册的节点仅帮忙Selenium Remote Control
java -jar selenium-server-standalone-贰.五叁.0.jar -role wd
//注册的节点仅辅助WebDriver

 4858.com 18

4. Selenium Grid启动

修改 node 配置

无差距于node的配备有两种方法

  1. 启动Selenium Grid server(hub)

4.1 启动hub

hub运维命令如下:

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

内部
-role钦点剧中人物为hub,通过下图能够见见:hub已采纳私下认可4444端口运维成功,且node可以透过进展登记

4858.com 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钦赐端口为 555伍,
-hub钦赐连接hub地址,通过下图能够看来node已成功连接hub

4858.com 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:

4858.com 21

透过json文件修改(三.X版本请参见作品最终配置)

譬如说新建2个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节点新闻:

4858.com 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 启动后用这个地址访问

肆.三 更加好的启航方法 — bat脚本

  1. 新建2个文本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-三.5.0.jar的目录:D:\grid

2) 后边三行stat java…是各自打开新的cmd窗口用以运维hub及node

 

  1. 双击selenium_grid.bat即可运行hub及node

 

测试代码:

在编辑代码以前大家先简单通晓下七个工具Maven 和 TestNG。

Maven:是一个体系管理工科具,可以用来项目营造打包等,还足以用来项目正视包管理。
TestNG:
是1个强劲的测试框架,设计灵感来自junit,但优于junit,它提供了很强劲的笺注,便于大家对case的各个操作。

4858.com 23

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

新建 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>

4858.com 24

伍. 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
节点(1玖二.168.捌四.19:555五)机器上运行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能够在希望的阳台和浏览器中快速运营,这里实在有四个须求,2个是兼具的剧本能都在钦赐浏览器中运维另三个正是尽只怕快捷运转。

先来化解第壹个要求:如果现行反革命本身有个测试脚本完成了
”打开百度界面,并输入页面title“,小编愿意他能够在A机器(1九2.16八.八四.20九)上的chrome
浏览器 和
firefox浏览器运转,在B(1九二.168.八4.19)机器上的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同时执行

4858.com 25

运作结果.png

  1. 配置node(节点)

陆. 科学普及难点

本子运维进程中若IE浏览器报错找不到成分,而Chrome及Firefox浏览器符合规律,原因是IE浏览器的吝惜形式未有停歇:

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

二) 在“Internet选项”中,切换来“安全”选项,废除“启用爱抚情势”的勾选

3) 并且上边三个区域的爱慕方式都亟需关闭

4858.com 26

 

因而Jenkins 执行脚本

Jenkins
是个CI(持续集成)工具,功效11分有力,插件也分外多,下边不难介绍怎么样把已经编制好的剧本放到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(也正是别的计算机或虚拟机环境,也得以一向将hub所在的那台微型总括机添加为node),在系统变量path中丰富相应的驱动文件的路线。(例如:将chromedriver所在的路子添加到path中,从前早已说过火狐、IE、Google浏览器环境的安排)

Selenium Grid 的GUI管理工科具

末段推荐四个Grid的GUI 管理工科具:

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

4858.com 27

Paste_Image.png

设置到位后会在导航中添加Grid的入口。

4858.com 28

Paste_Image.png

2. VisGrid 

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

4858.com 29

VisGrid.png

(二)   执行下边包车型地铁一声令下

补充 (17.07.27更新)

近年来因为接手一个连串,又供给再行搭建Grid
,而此时的Webdriver已经是叁.x版本了,同时大家来看的Grid的selenium-server-standalone
jar包也升级到了三.X
版本,纵然基本用法保持1致,可是在配置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 :内定端口号

4858.com 30

(三)  
要在同等电脑(或虚拟机)添加其他节点,再打开一个CMD窗口,运营方面的一声令下就行了(记得修改浏览器音信),记得同壹电脑上端口号别重复。

(四)
条件安排好后如下图所示(小编电脑开着叁个linux的虚拟机太卡了,有点浪费时间的觉得,不想弄了,可是相应和windows上的歧异不会太大,有环境的能够试下添加path变量、在极端履行有关命令添加节点)

 4858.com 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、
贯彻多少个测试脚本并行运转(例如几百个测试脚本即使3个个周转以来,要用很短日子)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有