Selenium Grid 的使用


簡介

Selenium Grid 是 selenium 的三大組件之一,允許用戶同時在不同的機器和系統上測試不同的瀏覽器,可以分布式的來執行我們的自動化測試,也可以測試不同瀏覽器的兼容性。

Selenium Grid 的組成:

  • hub節點(控制器)
    • 中心節點,控制節點。
    • 管理各個 node 節點的注冊信息和狀態。
    • 接受並轉發客戶端(測試腳本)請求到合適的 node 節點。
  • node 節點(執行器)
    • 子節點,代理點。
    • 負責注冊配置信息到 hub 節點(平台,瀏覽器,瀏覽器版本)
    • 負責接收來自 hub 節點轉發的請求以執行具體用例。
    • 也可單獨作為遠程節點執行測試用例。

環境准備

  • 在需要執行腳本的機器上安裝 jdk 和配置環境變量。
  • 然后下載 selenium-server-standalone-x.x.x.jar, 版本對應自己使用selenium 的版本。

Selenium Grid 運行

1.啟動 hub 節點

java -jar selenium-server-standalone-3.12.0.jar -role hub -port 18888 -maxSession 10

參數解釋:

  • java -jar selenium-server-standalone-3.12.0.jar 運⾏jar包
  • -role hub 以 hub 的⻆⾊運⾏
  • -port 8888 指定hub運⾏的端⼝(默認為4444)
  • -maxSession 10 最⼤的處理會話

啟動成功:

2.啟動 node 節點

啟動 chrome 瀏覽器:

java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-3.12.0.jar
-role node -hub " http://192.168.1.104:18888/grid/register/" -port 18881 -browser
"browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"

參數解釋:

  • -Dwebdriver.chrome.driver="chromedriver.exe" 指定 chromeDriver 驅動所在的路徑(本地)
  • -jar selenium-server-standalone-3.12.0.jar 執行jar包
  • -role node 以 node 角色執行。
  • -hub " http://192.168.1.104:18888/grid/register/" 將node 節點信息,注冊到 對應的 hub 節點上。
  • -port 18881 node節點使用的端口。
  • -browser "browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
    • browserName=chrome 運行的瀏覽器。
    • maxInstances=2 最多支持兩個瀏覽器示例。
    • version=75 瀏覽器版本號。
    • platform=WINDOWS 運行的平台

啟動成功:

3.查看 hub 運行狀態

通過地址:http://localhost:18888/grid/console

從控制台看到已經注冊了一個 node 節點,使用的是 chrome 瀏覽器。

4.執行腳本

Selenium Grid 運行環境啟動之后,我們通過對應的腳本來進行使用。

package com.ggf.webauto;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.net.URL;

/**
 * @Description:
 * @Author: ggf
 * @Date: 2020/04/06
 */
public class RemoteDemo {
    public static void main(String[] args) throws Exception {
        // 期望能力對象
        DesiredCapabilities capabilities = new DesiredCapabilities();
        //配置測試的瀏覽器,使用chrome瀏覽器
        capabilities.setBrowserName(BrowserType.CHROME);
        // hub節點
        String url = "http://192.168.1.104:18888/wd/hub";
        //和hub建立通訊,把相應配置傳給hub,hub會根據配置選擇注冊的node節點,打開相應的瀏覽器進行測試
        WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);
        driver.get("http://www.baidu.com");
        driver.findElement(By.id("kw")).sendKeys("selenium");
        Thread.sleep(2000);
        driver.quit();
    }
}

運行腳本之后,Selenium Grid 的 hub節點就會調用對應的 node 節點來執行我們腳本中的內容。

5. Selenium Grid 啟動優化

為了方便我們快速的啟動 Selenium Grid , 我們可以將啟動 hub 節點和 node 節點的命令寫成一個 .bat 文件(windows系統) 或 shell 腳本(Linux系統)

以下是window系統的示例:

  • 將 bat文件和瀏覽器驅動以及selenium-server的jar包放在同一個路徑下:

  • hub.bat
java -jar selenium-server-standalone-3.12.0.jar -role hub -port 18888 -maxSession 10
  • node.bat
set command=java
set chromeDriver=-Dwebdriver.chrome.driver="chromedriver.exe"
set jarParams=-jar selenium-server-standalone-3.12.0.jar
set type=-role node
set hub=-hub "http://192.168.1.104:18888/grid/register"
set port=-port 18881
set chrome=-browser "browserName=chrome,maxInstances=2,version=75,platform=WINDOWS"
%command% %chromeDriver% %jarParams% %type% %hub% %port% %chrome%

Selenium Grid + TestNG多線程執行

Selenium Grid能夠分布式在不同機器上運⾏不同瀏覽器,但是我們看到的串⾏的效果(也就是⼀個瀏覽器執⾏結束后,再運⾏另外⼀個瀏覽器)。要達到並發執⾏的效果,Selenium Grid是做不到的,我們需要通過TestNG單元測試框架所帶的並發執⾏機制。並發執⾏能夠帶來的好處:

  • 減少了執⾏時間:並⾏測試也就意味着多個瀏覽器可以在同⼀時間被同時執⾏,從⽽減少了整體測試所花費的時間
  • 允許多個線程並⾏同時執⾏⼀個測試腳本/不同的測試腳本

java運行腳本:

package com.ggf.webauto;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.BrowserType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;

import java.net.URL;

/**
 * @Description:
 * @Author: ggf
 * @Date: 2020/04/06
 */
public class SeleniumGridDemo {
    @Test
    public void testBaiduSearch() throws Exception{
        // 期望能力對象
        DesiredCapabilities capabilities = new DesiredCapabilities();
        //配置測試的瀏覽器,使用chrome瀏覽器
        capabilities.setBrowserName(BrowserType.CHROME);
        // hub節點
        String url = "http://192.168.1.104:18888/wd/hub";
        //和hub建立通訊,把相應配置傳給hub,hub會根據配置選擇注冊的node節點,打開相應的瀏覽器進行測試
        WebDriver driver = new RemoteWebDriver(new URL(url), capabilities);
        driver.get("http://www.baidu.com");
        driver.findElement(By.id("kw")).sendKeys("selenium");
        Thread.sleep(2000);
        driver.quit();
    }
}

xml文件配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" parallel="tests" thread-count="2">
    <test name="Test1">
        <classes>
            <class name="com.ggf.webauto.SeleniumGridDemo" />
        </classes>
    </test>
    <test name="Test2">
        <classes>
            <class name="com.ggf.webauto.SeleniumGridDemo" />
        </classes>
    </test>
</suite>

解釋:
parallel="tests"

tests級別:不同的test tag下的用例可以在不同的線程下執行。

相同的test tag下的用例只能在同一個線程中去執行。

thread-count=2:代表了最大並發線程數.

以上xml配置表示:啟動兩個線程同時執行 SeleniumGridDemo 類。

testng多線程更多內容可參考文章: testng使用詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM