分布式Selenium的配置思路

  在实际测试的环境中,有的时候我们需要配置多个远程主机来运行测试脚本。(尤其是面对多语言环境的情况下)那么,这时我们需要配置selenium Grid2 分布式自动化测试环境。

  selenium grid的组成与作用:由一个集线器hub和多个客户机node组成,如果你的程序需要在不同的浏览器,不同的操作系统上测试,而且比较多的case需要多线程远程执行,那么一个比较好的测试方案就是使用 selenium grid,hub用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令再转发给代理节点来执行。
       来看下面一张图:
  

  假如,我自己写代码的是PC-A,而想运行的地方在PC-B,那么可以按照以下方式设定。(这里PC-A,PC-B均为Windows系统)

  在PC-A上(写脚本的机器),使用管理员权限打开cmd命令行,找到selenium-server-standalone-3.9.1.jar所在的路径(假设为c:abc),执行命令:

java -jar c:abcselenium-server-standalone-3.9.1.jar -role hub -port 6667

   这里解释一下:

c:abcselenium-server-standalone-3.9.1.jar  这个是jar包的路径。

-role hub 是作为hub的角色运行

-port 6667 是开放6667端口供其他的客户端来连接。

 PS:可以将上面的命令做成BAT文件,运行的时候双击一下即可。也可以加入开机启动,唯一的缺点就是会要有个窗口开在那里。

        在PC-B上(即运行脚本的机器)上,安装JDK,并设置java环境变量,并且将selenium-server-standalone-3.9.1.jar拷贝过去。使用管理员权限打开cmd命令行,找到selenium-server-standalone-3.9.1.jar所在的路径(假设为d:abc),输入以下命令:

java -jar d:abcselenium-server-standalone-3.9.1.jar -role node -port 6667 -hub http://XXX.XXX.XXX.XXX:6667/grid/register/

这里解释一下:

-role node 是以mode角色来运行。

-port 6667 -hub http://XXX.XXX.XXX.XXX:6667/grid/register/ 是开放6667端口来连接hub,-hub 后面是hub的地址。

ps:当然这里也可以作成BAT文件。

  在进行以上的设定后。我们可以在自动化测试框架的browserUtil类中,封装一个remote_chrome的远程浏览器对象。可以参考下面一段代码:

        case "remote_chrome":
            try {
                driver = new RemoteWebDriver(new URL("http://192.168.8.113:6667/wd/hub/"), DesiredCapabilities.chrome());
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            log.info("打开浏览器,访问"+url+"网址!");
            Reporter.log("打开浏览器,访问"+url+"网址!");
            driver.get(url);
            break;

  当然,也可以封装其他浏览器的对象。

  在使用TestNG来写测试用例的时候,可以将这个写入到配置文件中。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SuiteTestA">
    
<parameter name="browser" value="remote_chrome"/>
    
<parameter name="url" value="http://192.168.1.23:4567/abc/index.html"/>
  
<test name = "TestA">
    <classes>
      
<class name = "testcase.autoOne"></class>
    
</classes>
  
</test> </suite>

  这样,我们运行这个xml就达到了A机器写脚本,B机器运行脚本的目的。

  

原文地址:https://www.cnblogs.com/generalli2019/p/12133910.html