셀레늄-그리드

Selenium Grid는 스크립트를 병렬로 (동시에) 실행할 수 있도록 여러 물리적 또는 가상 머신에 테스트를 배포하는 도구입니다. 빠르고 정확한 피드백을 제공하여 브라우저 및 플랫폼 전반에서 테스트 프로세스를 획기적으로 가속화합니다.

Selenium Grid를 사용하면 동일한 코드 기반을 사용하는 WebDriver 또는 Selenium Remote Control 테스트의 여러 인스턴스를 병렬로 실행할 수 있으므로 실행하는 시스템에 코드가있을 필요가 없습니다. selenium-server-standalone 패키지에는 그리드에서 스크립트를 실행하기위한 Hub, WebDriver 및 Selenium RC가 포함되어 있습니다.

Selenium Grid에는 허브와 노드가 있습니다.

  • Hub− 허브는 테스트가 트리거되는 중앙 지점 역할을하는 서버로도 이해 될 수 있습니다. Selenium Grid에는 허브가 하나만 있으며 단일 시스템에서 한 번 실행됩니다.

  • Node− 노드는 테스트를 실행하는 허브에 연결된 Selenium 인스턴스입니다. 모든 OS가 될 수 있고 Selenium 지원 브라우저를 포함 할 수있는 그리드에 하나 이상의 노드가있을 수 있습니다.

건축물

다음 다이어그램은 Selenium Grid의 아키텍처를 보여줍니다.

그리드 작업

Grid와 함께 작업하려면 특정 프로토콜을 따라야합니다. 이 과정에 관련된 주요 단계는 다음과 같습니다.

  • 허브 구성
  • 노드 구성
  • 스크립트 개발 및 XML 파일 준비
  • 테스트 실행
  • 결과 분석

각 단계에 대해 자세히 설명하겠습니다.

허브 구성

Step 1 − 최신 Selenium Server 독립형 JAR 파일을 다음에서 다운로드하십시오. http://docs.seleniumhq.org/download/. 아래 그림과 같이 버전을 클릭하여 다운로드하십시오.

Step 2− 다음 명령을 사용하여 Selenium 서버를 시작하여 허브를 시작하십시오. 이제 포트 '4444'를 사용하여 허브를 시작합니다.

Note − 포트 번호 4444에서 실행중인 다른 응용 프로그램이 없는지 확인하십시오.

java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000

Step 3 − 이제 브라우저를 열고 허브에서 URL http // localhost : 4444로 이동합니다 (단계 # 2를 실행 한 시스템).

Step 4− 이제 '콘솔'링크를 클릭하고 '구성보기'를 클릭하십시오. 허브 구성은 다음과 같이 표시됩니다. 현재로서는 노드가 없으므로 세부 정보를 볼 수 없습니다.

노드 구성

Step 1− 스크립트를 실행하려는 노드에 로그온하고 'selenium-server-standalone-2.42.2'를 폴더에 배치합니다. 노드를 시작하는 동안 selenium-server-standalone JAR을 가리켜 야합니다.

Step 2 − 다음 명령을 사용하여 FireFox Node를 시작합니다.

java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role node -hub http://10.30.217.157:4444/grid/register
   -browser browserName = firefox -port 5555

어디,

D : \ JAR \ selenium-server-standalone-2.42.2.jar = Selenium Server Standalone Jar 파일의 위치 (노드 머신에서)

http://10.30.217.157:4444 = 허브의 IP 주소이고 4444는 허브의 포트입니다.

browserName = firefox (노드에서 브라우저 이름을 지정하는 매개 변수)

5555 = Firefox 노드가 실행될 포트.

Step 3− 명령을 실행 한 후 허브로 돌아갑니다. URL (http://10.30.217.157:4444)로 이동하면 허브에 연결된 노드가 표시됩니다.

Step 4− 이제 Internet Explorer 노드를 시작하겠습니다. IE 노드를 시작하려면 노드 시스템에 Internet Explorer 드라이버를 다운로드해야합니다.

Step 5 − Internet Explorer 드라이버를 다운로드하려면 다음으로 이동하십시오. http://docs.seleniumhq.org/download/OS의 아키텍처에 따라 적절한 파일을 다운로드하십시오. 다운로드 한 후 exe 파일의 압축을 풀고 IE 노드를 시작할 때 참조해야하는 폴더에 넣습니다.

Step 6 − 다음 명령을 사용하여 IE를 시작합니다.

C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role webdriver -hub http://10.30.217.157:4444/grid/register
   -browser browserName = ie,platform = WINDOWS -port 5558

어디,

D : \ IEDriverServer.exe = 다운로드 한 IE 드라이버의 위치 (노드 머신에서)

D : \ JAR \ selenium-server-standalone-2.42.2.jar = Selenium Server Standalone Jar 파일의 위치 (노드 머신에서)

http://10.30.217.157:4444 = 허브의 IP 주소이고 4444는 허브의 포트입니다.

browserName = ie (노드에서 브라우저 이름을 지정하는 매개 변수)

5558 = IE 노드가 가동되고 실행될 포트.

Step 7− 명령을 실행 한 후 허브로 돌아갑니다. URL (http://10.30.217.157:4444)로 이동하면 허브에 연결된 IE 노드가 표시됩니다.

Step 8− 이제 Chrome Node를 시작하겠습니다. Chrome 노드를 시작하려면 노드 시스템에 Chrome 드라이버를 다운로드해야합니다.

Step 9 − Chrome 드라이버를 다운로드하려면 다음으로 이동하십시오. http://docs.seleniumhq.org/download/ 그런 다음 타사 브라우저 드라이버 영역으로 이동하여 아래와 같이 버전 번호 '2.10'을 클릭합니다.

Step 10− OS 유형에 따라 드라이버를 다운로드하십시오. Windows 환경에서 실행하므로 Windows Chrome 드라이버를 다운로드합니다. 다운로드 한 후 exe 파일의 압축을 풀고 크롬 노드를 시작할 때 참조해야하는 폴더에 넣습니다.

Step 11 − 다음 명령을 사용하여 Chrome을 시작합니다.

C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe 
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar 
   -role webdriver -hub  http://10.30.217.157:4444/grid/register 
   -browser browserName = chrome, platform = WINDOWS -port 5557

어디,

D : \ chromedriver.exe = 다운로드 한 크롬 드라이버의 위치 (노드 머신에서)

D : \ JAR \ selenium-server-standalone-2.42.2.jar = Selenium Server Standalone Jar 파일의 위치 (노드 머신에서)

http://10.30.217.157:4444 = 허브의 IP 주소이고 4444는 허브의 포트입니다.

browserName = chrome (노드에서 브라우저 이름을 지정하는 매개 변수)

5557 = 크롬 노드가 실행될 포트.

Step 12− 명령을 실행 한 후 허브로 돌아갑니다. URL-http://10.30.217.157:4444로 이동하면 허브에 연결된 크롬 노드가 표시됩니다.

스크립트 개발 및 XML 파일 준비

Step 1− TestNG를 사용하여 테스트를 개발합니다. 다음 예에서는 원격 webDriver를 사용하여 각 브라우저를 시작합니다. 드라이버가 노드에서 실행할 모든 정보를 갖도록 드라이버에 기능을 전달할 수 있습니다.

브라우저 매개 변수는 "XML"파일에서 전달됩니다.

package TestNG;

import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;

public class TestNGClass {
   public WebDriver driver;
   public String URL, Node;
   protected ThreadLocal<RemoteWebDriver> threadDriver = null;
   
   @Parameters("browser")
   @BeforeTest
   public void launchapp(String browser) throws MalformedURLException {
      String URL = "http://www.calculator.net";
      
      if (browser.equalsIgnoreCase("firefox")) {
         System.out.println(" Executing on FireFox");
         String Node = "http://10.112.66.52:5555/wd/hub";
         DesiredCapabilities cap = DesiredCapabilities.firefox();
         cap.setBrowserName("firefox");
         
         driver = new RemoteWebDriver(new URL(Node), cap);
         // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("chrome")) {
         System.out.println(" Executing on CHROME");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("chrome");
         String Node = "http://10.112.66.52:5557/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("ie")) {
         System.out.println(" Executing on IE");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("ie");
         String Node = "http://10.112.66.52:5558/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else {
         throw new IllegalArgumentException("The Browser Type is Undefined");
      }
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();     	
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      // driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void closeBrowser() {
      driver.quit();
   }
}

Step 2− 브라우저 매개 변수는 XML을 사용하여 전달됩니다. 프로젝트 폴더 아래에 XML을 만듭니다.

Step 3 − '일반'에서 '파일'을 선택하고 '다음'을 클릭합니다.

Step 4 − 파일 이름을 입력하고 '마침'을 클릭합니다.

Step 5 − 아래와 같이 프로젝트 폴더 아래에 TestNg.XML이 생성됩니다.

Step 6− XML 파일의 내용은 다음과 같습니다. 우리는 3 개의 테스트를 만들어서 스위트에 넣고 parallel = "tests"를 언급하여 모든 테스트가 병렬로 실행되도록합니다.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">

   <test name = "FirefoxTest">
   <parameter name = "browser" value = "firefox" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "ChromeTest">
   <parameter name = "browser" value = "chrome" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "IETest">
   <parameter name = "browser" value = "ie" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>
   
</suite>

테스트 실행

Step 1− 생성 된 XML을 선택합니다. 마우스 오른쪽 버튼을 클릭하고 '다음으로 실행'>> 'TestNG Suite'를 선택합니다.

Step 2− 이제 모든 브라우저 노드를 시작한 노드를 엽니 다. 동시에 실행중인 세 가지 브라우저가 모두 표시됩니다.

결과 분석

Step 1− 실행이 완료되면 다른 실행과 마찬가지로 결과를 분석 할 수 있습니다. 결과 요약은 다음 스냅 샷과 같이 콘솔에 인쇄됩니다.

Step 2 − 'Results of Running Suite'탭으로 이동하면 TestNG는 아래와 같이 결과 요약을 표시합니다.

Step 3 − HTML을 생성하면 테스트 결과를 HTML 형식으로 볼 수 있습니다.