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,也就是小弟,两台电脑一定要能ping通。

第三步:hub机上新建HUB.bat, 内容参考:  

java -jar C:\\Software\\selenium\\selenium-server-standalone-2.40.0.jar -role hub

  其中selenium-server-standalone-2.40.0.jar 的版本和路径需要改成自己的。

第四步:node机上新建node.bat,内容参考:  

java -Dwebdriver.chrome.driver="C:\\software\\chromedriver.exe" -Dwebdriver.ie.driver="C:\\software\\IEDriverServer-x64.exe" -jar C:\\libs\\selenium-server-standalone-2.40.0.jar -role node -nodeConfig node.json -hub http://hub机IP:4444/grid/register

  其中 chromedriver.exe,IEDriverServer-x64.exe,standalone都需要改为node机上对应的地址, -nodeConfig node.json可以修改node机上的grid参数,具体内容参考:

{

"capabilities": [
{
"browserName": "chrome",
"maxInstances": 5,
"platform": "WINDOWS",
"version":"51"
},
{
"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"
}
}

第五步:先运行hub.bat,在运行node.bat,在hub机上打开 http://localhost:4444/grid/console# 查看链接状态

第六步:编写java脚本

package test;

import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

/**
 *
 * @author Rong
 *
 */

public class RemoteWebDriverUtil {

    static WebDriver driver;

    // 远程调用ie浏览器
    public static WebDriver createRemoteIEDriver() {
        // 指定调用IE进行测试
        DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
        // 避免IE安全设置里,各个域的安全级别不一致导致的错误
        capability.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        // 连接到selenium hub,远程启动浏览器
        capability.setPlatform(Platform.XP);
        try {
            driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return driver;
    }

    // 启用远程调用chrome
    public static WebDriver createRemoteChromeDriver() {
        DesiredCapabilities capability = DesiredCapabilities.chrome();
        capability.setBrowserName("chrome");
        capability.setVersion("62");
        capability.setPlatform(Platform.WINDOWS);
        try {
            driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return driver;
    }

    // 启用远程调用firefox
    public static WebDriver createRemoteFirefoxDriver() {
        DesiredCapabilities capability = DesiredCapabilities.firefox();
        capability.setBrowserName("firefox");
        capability.setPlatform(Platform.XP);
        try {
            driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return driver;
    }

}
package test;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class test  extends RemoteWebDriverUtil{

    @Test
    public void testBaiduSearch() throws Exception{

        WebDriver driver = createRemoteChromeDriver();

        driver.get("http://www.baidu.com");
        WebElement baiduInput = driver.findElement(By.id("kw"));
        baiduInput.sendKeys("Cherry_chrome");
        WebElement btnSearch = driver.findElement(By.id("su"));
        btnSearch.click();

        try {
            WebElement CherrySearchResult = driver.findElement(By.cssSelector(".op_dict3_font24.op_dict3_marginRight"));
            System.out.println("Find search result Successfully!");
        } catch (NoSuchElementException e) {
            System.out.println("Can‘t find search result!, Search failed!");
        }
    }

}

第七步:运行test.java,node机上的chromedriver.exe运行起来了,整个分布式搭建完成。

第六步代码转自:http://www.cnblogs.com/longronglang/p/6220277.html

第三步配置文件转自:http://www.360doc.com/content/16/1121/14/36343398_608254453.shtml

时间: 2024-09-29 01:45:05

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

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