Selenium 그리드 튜토리얼: 허브와 노드 설정하기

⚡ 스마트 요약

Selenium Grid는 허브-노드 아키텍처를 사용하여 여러 브라우저, 운영 체제 및 머신에서 병렬로 테스트를 실행합니다. 허브는 한 머신에서 부하 테스트를 수행하고 노드는 다른 머신에서 테스트를 실행하므로 명령줄 또는 JSON 구성을 통해 더 빠른 크로스 브라우저 테스트 범위를 확보할 수 있습니다.

  • 🧩 그리드 정의됨: 허브와 노드를 통해 다양한 브라우저, 운영체제 및 기기에서 테스트를 병렬로 실행합니다.
  • 🎯 바퀴통: 부하 테스트를 수행하는 단일 중앙 장비, 그리드당 허브는 하나만 사용됩니다.
  • 🖥️ 노드 : 실제로 다양한 플랫폼에서 테스트를 실행하는 하나 이상의 머신.
  • ⚙️ 설정 : 를 실행 Selenium `-role hub` 및 `-role node` 옵션이 포함된 서버 JAR 파일을 사용하거나 JSON 설정 파일을 사용하십시오.
  • 🧪 테스트 스크립트: DesiredCapabilities와 RemoteWebDriver를 사용하여 브라우저, 운영 체제 및 노드를 대상으로 지정할 수 있습니다.
  • ⏱️ 사용시기 : 광범위한 브라우저-운영체제 호환성 검사 및 더 빠른 병렬 실행 기능.

Selenium 그리드 튜토리얼

Selenium 그리드?

Selenium 그리드 는 Selenium 여러 브라우저, 운영 체제, 머신에서 병렬로 여러 테스트를 실행하는 데 특화된 제품군입니다. 서버가 허브 역할을 하는 원격 브라우저 인스턴스의 명령을 라우팅하여 달성됩니다. 사용자는 테스트를 실행하기 위해 원격 서버를 구성해야 합니다.

Selenium 그리드에는 이전 그리드 2과 최신 그리드 1의 두 가지 버전이 있습니다. 그리드 2은 점차적으로 더 이상 사용되지 않으므로 그리드 2에만 중점을 둘 것입니다. Selenium 팀.

Selenium 그리드 Archi강의

Selenium 그리드에는 허브와 노드가 있습니다 Archi강의.

Selenium 그리드 Archi강의
Selenium 그리드 Archi강의

허브

  • 허브는 테스트를 로드하는 중앙 지점입니다.
  • 그리드에는 허브가 하나만 있어야 합니다.
  • 허브는 단일 시스템(예: OS가 다음과 같은 컴퓨터)에서만 실행됩니다. Windows 7이며 브라우저는 IE입니다.
  • 허브가 포함된 머신은 테스트가 실행되는 곳이지만 브라우저가 노드에서 자동화되는 것을 볼 수 있습니다.

노드

  • 노드는 Selenium 허브에 로드한 테스트를 실행할 인스턴스입니다.
  • 그리드에는 하나 이상의 노드가 있을 수 있습니다.
  • 다양한 플랫폼과 브라우저를 사용하는 여러 시스템에서 노드를 시작할 수 있습니다.
  • 노드를 실행하는 머신은 허브의 플랫폼과 동일한 플랫폼일 필요는 없습니다.

Selenium Grid는 단일 시스템에서만 테스트를 실행하는 허브 노드 개념을 사용합니다. 허브하지만 실행은 다음과 같은 다른 컴퓨터에서 수행됩니다. 노드.

설정 방법 Selenium 그리드?

이 섹션에서는 2대의 머신을 사용합니다. 첫 번째 머신은 허브를 실행하는 시스템이고 다른 머신은 노드를 실행합니다. 단순화를 위해 허브가 실행되는 머신을 "머신 A"라고 부르고 노드가 실행되는 머신을 "머신 B"라고 부르겠습니다. IP 주소를 기록해 두는 것도 중요합니다. 머신 A의 IP 주소가 192.168.1.3이고 머신 B의 IP 주소가 192.168.1.4라고 가정해 보겠습니다.

단계 1) 를 다운로드 Selenium 서버: 여기에서 확인하세요.

설정 Selenium 그리드

단계 2) 당신은 배치 할 수 있습니다 Selenium 하드 드라이브의 어느 위치에나 서버 .jar 파일이 있습니다. 하지만 이 튜토리얼의 목적을 위해 이를 머신 A와 머신 B의 C 드라이브에 배치합니다. 이렇게 하면 이제 설치가 완료됩니다. Selenium 그리드. 다음 단계는 허브와 노드를 시작합니다.

단계 3)

  • 이제 허브를 출시할 예정입니다. 머신 A로 이동합니다. 명령 프롬프트를 사용하여 머신 A – C 드라이브의 루트로 이동합니다. Selenium 서버.
  • 명령 프롬프트에서 다음을 입력합니다. 자바 -jar 셀레늄-서버-독립형-2.30.0.jar -역할 허브
  • 허브가 성공적으로 시작되어야 합니다. 명령 프롬프트는 아래 이미지와 유사해야 합니다.

설정 Selenium 그리드

단계 4) 허브가 실행 중인지 확인하는 또 다른 방법은 브라우저를 사용하는 것입니다. Selenium Grid는 기본적으로 웹 인터페이스에 Machine A의 포트 4444를 사용합니다. 브라우저를 열고 다음으로 이동하세요. http://localhost:4444/grid/console

설정 Selenium 그리드

또한 머신 B에서 브라우저를 실행하고 "iporhostnameofmachineA"가 허브가 실행 중인 머신의 IP 주소 또는 호스트 이름이어야 하는 위치로 이동하여 머신 B가 허브의 웹 인터페이스에 액세스할 수 있는지 확인할 수 있습니다. 머신 A의 IP 주소는 192.168.1.3이므로 머신 B의 브라우저에 다음을 입력해야 합니다. http://192.168.1.3:4444/grid/console

단계 5)

  • 이제 허브가 이미 설정되었으므로 노드를 시작하겠습니다. 머신 B로 이동하여 그곳에서 명령 프롬프트를 실행합니다.
  • C 드라이브의 루트로 이동하여 아래 코드를 입력하세요. 허브가 실행되는 곳이기 때문에 IP 주소 192.168.1.3을 사용했습니다. 또한 원하는 무료 포트 번호를 선택할 수 있지만 포트 5566을 사용했습니다.
  • 참고: 이제 Gecko 드라이버를 사용하는 경우 경로를 제공해야 합니다. Firefox. 다음은 사용해야 하는 업데이트된 코드입니다.
java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar -role webdriver -hub http://192.168.1.3:4444/grid/register -port 5566

설정 Selenium 그리드

  • Enter 키를 누르면 명령 프롬프트가 아래 이미지와 유사해야 합니다.

설정 Selenium 그리드

단계 6) 로 이동 Selenium 그리드 웹 인터페이스 및 페이지 새로 고침. 이런 것을 봐야합니다.

설정 Selenium 그리드

이 시점에서는 이미 간단한 그리드를 구성했습니다. 이제 머신 B에서 원격으로 테스트를 실행할 준비가 되었습니다.

언제 사용 하는가? Selenium 그리드?

당신은 사용해야합니다. Selenium 다음 중 하나 또는 둘 다를 수행하려는 경우 그리드를 사용합니다.

  • 다양한 브라우저, 운영 체제, 컴퓨터에서 동시에 테스트를 실행해 보세요. 이렇게 하면 귀하의 응용 프로그램이 확인됩니다. 지원 다양한 브라우저-OS 조합과 완벽하게 호환됩니다.
  • 테스트 스위트 실행 시간을 절약하세요. 설정한 경우 Selenium 예를 들어 한 번에 4개의 테스트를 실행하는 그리드를 사용하면 전체 제품군을 약 4배 더 빠르게 완료할 수 있습니다.

그리드 1.0 대 그리드 2.0

다음은 주요 차이점입니다. Selenium 그리드 1과 2.

그리드 1 그리드 2
Selenium 그리드 1에는 그리드 XNUMX과 다른 자체 리모컨이 있습니다. Selenium RC 서버. 그들은 두 가지 다른 프로그램입니다. Selenium 그리드 2는 이제 다음과 함께 번들로 제공됩니다. Selenium 서버 jar 파일
설치하고 구성해야 합니다. 아파치 Grid 1을 사용하기 전에 먼저 Ant를 사용하세요. Grid 2에는 Apache Ant를 설치할 필요가 없습니다.
지원만 가능 Selenium RC 명령/스크립트. 둘 다 지원할 수 있음 Selenium RC 및 WebDriver 스크립트.
리모컨당 하나의 브라우저만 자동화할 수 있습니다. 하나의 리모컨으로 최대 5개의 브라우저를 자동화할 수 있습니다.

Selenium 그리드는 두 가지 방법으로 설정할 수 있습니다. 하나는 명령줄을 통해, 다른 하나는 JSON 구성 파일을 통해 수행됩니다.

그리드에서 실행할 수 있는 테스트 스크립트 디자인

그리드에서 실행될 테스트 스크립트를 디자인하려면 다음을 사용해야 합니다. 원하는 기능 그리고 원격웹드라이버 사물.

  • 원하는 기능 유형을 설정하는 데 사용됩니다. 브라우저 OS 우리가 자동화할 것입니다.
  • 원격웹드라이버 테스트를 실행할 노드(또는 머신)를 설정하는 데 사용됩니다.

을 사용하려면 원하는 기능 개체를 사용하려면 먼저 이 패키지를 가져와야 합니다.

그리드에서 실행할 수 있는 테스트 스크립트 디자인

을 사용하려면 원격웹드라이버 개체인 경우 이러한 패키지를 가져와야 합니다.

그리드에서 실행할 수 있는 테스트 스크립트 디자인

DesiredCapabilites 개체 사용

Grid의 웹 인터페이스로 이동하여 자동화하려는 브라우저 이미지 위로 마우스를 가져갑니다. 다음 사항을 참고하세요. 플랫폼 그리고 브라우저 이름 툴팁으로 표시됩니다.

DesiredCapabilites 개체 사용

이 경우 플랫폼은 “XP”이고 browserName은 “Firefox. "

아래와 같이 WebDriver에서 플랫폼과 browserName을 사용합니다(물론 필요한 패키지를 먼저 가져와야 합니다).

DesiredCapabilites 개체 사용

RemoteWebDriver 개체 사용

RemoteWebDriver에 필요한 패키지를 가져온 다음 위에서 생성한 DesiredCapability 개체를 RemoteWebDriver 개체의 매개 변수로 전달합니다.

RemoteWebDriver 개체 사용

그리드에서 샘플 테스트 케이스 실행

아래는 간단한 WebDriver입니다. 테스트 중 에서 만들 수 있는 코드 Eclipse Machine A에서 실행하면 Machine B에서 자동화가 수행됩니다.

import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class Grid_2 {
 WebDriver driver;
 String baseUrl, nodeURL;
 @BeforeTest
 public void setUpWthrows MalformedURLException {
 baseUrl = "http://newtours.demoaut.com/";
 nodeURL = "http://192.168.1.4:5566/wd/hub";
 DesiredCapabilities capability = DesiredCapabilities.firefox();
 capability. setBrowserName("firefox");
 capability. setPlatform(Platform.XP);
 driver = new RemoteWebDriver(new URL(nodeURL), capability);
}
@AfterTest
public void afterTest() {
 driver.quit();
 }
@Test
public void simpleTest() {
driver.get(baseUr1);
 Assert.assertEquas("Welcome: Mercury Tours", driver.getTitle()); }
}

테스트는 통과해야 합니다.

Gride에서 샘플 테스트 케이스 실행 Gride에서 샘플 테스트 케이스 실행

Selenium JSON 파일을 사용한 그리드 구성

JSON은 다음을 의미합니다. Javascript 객체 표기법. 브라우저와 웹 서버 간의 데이터 교환에 사용되는 표준 형식입니다. Selenium Selenium Grid를 설정하는 데 사용할 수 있는 내장 JSON 구성 파일이 있습니다.

JSON 구성 파일을 사용하여 Selenium Grid를 구성하는 단계는 다음과 같습니다.

단계 1) 아래 경로를 사용하여 JSON 구성 파일의 코드를 다운로드하세요.

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultHub.json

다음은 코드입니다.

{
	  "port": 4444,
	  "newSessionWaitTimeout": -1,
	  "servlets" : [],
	  "withoutServlets": [],
	  "custom": {},
	  "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
	  "registryClass": "org.openqa.grid.internal.DefaultGridRegistry",
	  "throwOnCapabilityNotPresent": true,
	  "cleanUpCycle": 5000,
	  "role": "hub",
	  "debug": false,
	  "browserTimeout": 0,
	  "timeout": 1800
}

단계 2) 확장자가 '.json'인 메모장과 같은 텍스트 편집기에 코드를 복사하여 붙여넣습니다.

단계 3) 명령 프롬프트를 사용하여 아래 명령을 사용하여 허브를 시작합니다.

java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hubconfig.json

알림: Selenium 독립형 jar 파일과 json 파일이 동일한 디렉터리에 있어야 합니다.

단계 4) 허브가 성공적으로 설정되었음을 나타내는 아래 화면이 나타납니다.

Selenium JSON 파일을 사용한 그리드 구성

단계 5) 웹 브라우저를 열고 아래 주소에 접속해 보세요. URL

http://192.168.43.223:4444/grid/console

알림: The URL 기기마다 다를 수 있습니다. URL 위 화면에 표시되는 '노드는 다음으로 등록해야 합니다'를 사용해야 합니다.

단계 6) 허브가 작동 중임을 나타내는 그리드 콘솔 화면이 나타납니다.

Selenium JSON 파일을 사용한 그리드 구성

JSON을 사용하여 노드 구성

단계 1) 에서 제공하는 샘플 노드 구성 파일을 다운로드하세요. Selenium 아래를 사용하여 URL

https://github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json

알림: SELENIUM 3.0 이상을 사용하는 경우 아래 JSON 파일을 사용해야 합니다.

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultNodeWebDriver.json

단계 2) 코드를 복사하여 메모장과 같은 텍스트 편집기에 붙여넣고 '.json' 확장자로 파일을 저장합니다.

단계 3)

명령 프롬프트에서 아래 명령을 실행하십시오.

Java-Dwebdriver.chrome.driver="chromedriver.exe" -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node1.json

알림: 명령을 실행하기 전에 각 브라우저의 드라이버가 로컬 시스템 디렉터리에 다운로드되었는지 확인하세요.

단계 4) 엔터키를 누르면 아래 화면이 나옵니다

JSON을 사용하여 노드 구성

단계 5) 노드가 성공적으로 구성되었는지 확인하려면 그리드 콘솔로 이동하세요.

JSON을 사용하여 노드 구성

브라우저는 그리드 콘솔에 표시됩니다. 따라서 노드가 성공적으로 구성되었는지 확인할 수 있습니다.

샘플 테스트 케이스 켜기 Selenium 그리드:

 package com.objectrepository.demo;
 import org.openqa.selenium.*;
 import org.openqa.selenium.remote.DesiredCapabilities;
 import java.net.MalformedURLException;
 import java.net.URL;
 import org.openqa.selenium.remote.RemoteWebDriver;
 import org.testng.Assert;
 import org.testng.annotations.*;

 public class SeleniumGrid {

     WebDriver driver;
     String baseURL, nodeURL;

     @BeforeTest
     public void setUp() throws MalformedURLException {
         baseURL = "https://demo.guru99.com/test/guru99home/";
         nodeURL = "http://192.168.43.223:5566/wd/hub";
         DesiredCapabilities capability = DesiredCapabilities.chrome();
         capability.setBrowserName("chrome");
         capability.setPlatform(Platform.WIN10);
         driver = new RemoteWebDriver(new URL(nodeURL), capability);
     }

     @AfterTest
     public void afterTest() {
         driver.quit();
     }
     @Test
     public void sampleTest() {
         driver.get(baseURL);


         if (driver.getPageSource().contains("MOBILE TESTING")) {
             Assert.assertTrue(true, "Mobile Testing Link Found");
         } else {
             Assert.assertTrue(false, "Failed: Link not found");
         }

     }

 }

위 코드는 크롬 브라우저를 실행하고 해당 페이지로 이동합니다. URL '기본'에 지정된URL'변수'입니다. 페이지에 '모바일 테스트'라는 링크 이름이 표시되는지 확인했습니다.

URL '노드'에서URL'변수는 원격 시스템의 IP 주소를 반영하도록 수정할 수 있습니다. 테스트 결과는 기본값에서 확인할 수 있습니다. TestNG 보고서가 생성됨

자주 묻는 질문

허브는 부하 테스트를 수행하고 그리드를 관리하는 중앙 집중식 머신입니다. 노드는 특정 브라우저 및 운영 체제 조합에서 실제로 테스트를 실행하는 머신입니다. 그리드는 하나의 허브와 하나 이상의 노드로 구성됩니다.

Grid 1은 별도의 원격 제어를 사용하며 Apache Ant가 필요하고, 다음만 지원합니다. Selenium RC 스크립트와 컨트롤당 하나의 브라우저가 필요합니다. Grid 2는 다음 패키지에 포함되어 있습니다. Selenium 서버 JAR 파일이며 Ant가 필요 없고 RC 및 WebDriver 스크립트를 모두 지원합니다.

DesiredCapabilities 객체를 생성하고 browserName과 platform을 설정한 다음, 해당 객체를 노드의 RemoteWebDriver에 전달합니다. URL그리드는 해당 브라우저 및 운영 체제에 맞는 노드로 테스트를 라우팅합니다.

AI는 테스트 실행의 우선순위를 정하고 병렬화하며, 불안정한 테스트를 예측하고, 노드 간 부하를 분산하고, 손상된 로케이터를 자체 복구할 수 있습니다. 이를 통해 다양한 브라우저-운영체제 조합이 실행되는 대규모 그리드에서 실행 시간과 유지 관리 노력을 줄일 수 있습니다.

예. AI 도구는 최적의 노드 수를 추천하고, JSON 구성을 생성하고, 대기열 길이에 따라 클라우드 그리드를 자동 확장하고, 활용도가 낮은 용량을 감지하는 데 도움이 될 수 있습니다.ping 팀은 수동 조정 없이 대규모 소프트웨어 제품군을 효율적으로 실행할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.