병렬 실행 Selenium

⚡ 스마트 요약

세션, 병렬 실행 및 종속성 Selenium WebDriver 인스턴스별로 고유한 sessionId를 결합합니다. TestNG 스위트 제어 기능을 통해 여러 브라우저 창에서 독립적이거나 순서대로 스크립트를 동시에 실행하고 회귀 테스트 주기를 더 빠르게 완료할 수 있습니다.

  • 🧩 주요 원리: 새로운 WebDriver 인스턴스가 생성될 때마다 새로운 sessionId가 생성되므로, 동일한 컴퓨터에서 두 드라이버가 명령이나 쿠키를 공유하는 일은 절대 없습니다.
  • ⚙️ 구현 : parallel="methods"(또는 tests, classes, instances)에 스레드 수를 더하여 설정하세요. TestNG testng.xml의 suite 태그를 사용하여 실행을 분산시킵니다.
  • 🧵 병행: 동시 실행 시 공유 브라우저 창에서 발생하는 경쟁 조건을 방지하려면 @Test 메서드당 하나의 WebDriver를 사용하십시오.
  • 🔗 의존: 특정 메서드가 다른 메서드보다 먼저 실행되어야 하는 경우, testng.xml의 include 태그 안에 dependsOnMethods를 사용하거나 @Test 어노테이션을 사용하여 테스트 순서를 지정하세요.
  • 🤖 AI 활용: 최신 AI 도우미는 과거 실행 데이터를 기반으로 최적의 스레드 수, 안전한 병렬 처리 방식 그룹화, 불안정한 후보 방식 등을 예측합니다.

병렬 실행을 실행하는 방법 Selenium

스크립트를 병렬로 실행하는 방법을 이해하려면 먼저 다음 사항을 알아야 합니다. Selenium 세션을 통해 각 브라우저를 격리합니다.

세션 처리가 필요한 이유는 무엇입니까?

테스트 실행 중에는 Selenium WebDriver는 주어진 명령을 실행하기 위해 모든 단계에서 브라우저와 상호 작용해야 합니다. 테스트가 실행되는 동안 다른 사용자가 동일한 컴퓨터와 동일한 유형의 브라우저에서 두 번째 스크립트를 실행할 수 있습니다.

세션 처리

이러한 상황에서는 두 실행이 겹치지 않도록 하는 메커니즘이 필요합니다. Selenium 이 문제는 세션 처리를 통해 해결됩니다.

세션 처리를 달성하는 방법 Selenium 웹드라이버?

검사해 보시면 Selenium WebDriver 소스 코드에서 다음과 같은 변수를 찾을 수 있습니다. sessionId새로운 WebDriver 인스턴스를 생성할 때마다 새로운 인스턴스가 생성됩니다. sessionId 생성되어 해당 항목에 첨부됩니다. Firefox크롬 또는 IE 드라이버.

세션 처리 달성 Selenium 웹드라이버

이후의 모든 명령은 해당 브라우저 세션 내에서만 실행됩니다.

세션 처리 달성 Selenium 웹드라이버

WebDriver에 이 기능이 내장되어 있으므로 sessionId를 수동으로 할당할 필요가 없습니다.

Code 예: 두 개의 WebDriver 인스턴스에 대해 서로 다른 두 개의 세션이 생성됩니다.

세션 핸들링.java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class SessionHandling {
    public static void main(String... strings) {
        // First session of WebDriver
        WebDriver driver = new FirefoxDriver();
        // Go to guru99 demo site
        driver.get("https://demo.guru99.com/V4/");

        // Second session of WebDriver
        WebDriver driver2 = new FirefoxDriver();
        // Go to guru99 demo site
        driver2.get("https://demo.guru99.com/V4/");
    }
}

병렬 테스트를 실행하는 방법 Selenium

때로는 다음과 같은 상황에서는 여러 테스트를 동시에 실행해야 할 필요가 있습니다. 크로스 브라우저 검사 또는 대형 흡연실.

이러한 경우 parallel 속성의 TestNG 스위트 태그가 그 역할을 합니다.

다음을 사용하여 병렬 테스트 실행 Selenium

suite 태그의 parallel 속성은 네 가지 값을 허용합니다.

속성 값의미
테스트전부의 테스트 케이스 내부 태그 테스트 XML 파일이 병렬로 실행됩니다.
수업내부의 모든 테스트 케이스 Java 수업은 병렬로 실행됩니다.
방법@Test 어노테이션이 붙은 모든 메서드는 병렬로 실행됩니다.
인스턴스같은 인스턴스 내의 테스트는 병렬로 실행되지만, 서로 다른 두 인스턴스의 두 메서드는 서로 다른 스레드에서 실행됩니다.

The thread-count 이 속성은 해당 실행에 할당될 스레드 수를 결정합니다. 이 속성을 다음 속성과 함께 사용하세요. TestNG 뼈대 설치 TestNG in Eclipse 실행하기 전에. 단일 머신을 넘어 확장하려면 동일한 스위트를 통해 라우팅하십시오. Selenium 그리드 4 분산 병렬 실행을 위해.

전체 예시: 세 개의 테스트 케이스가 병렬로 실행되어 로그인 데이터를 채웁니다. https://demo.guru99.com/.

전체 프로젝트는 다음과 같습니다.

다음을 사용하여 병렬 테스트 실행 Selenium

Test Guru99MultipleSession.java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;

public class TestGuru99MultipleSession {

    @Test
    public void executeSessionOne() {
        // First session of WebDriver
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/V4/");
        // Find the user name text box and fill it
        driver.findElement(By.name("uid")).sendKeys("Driver 1");
    }

    @Test
    public void executeSessionTwo() {
        // Second session of WebDriver
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/V4/");
        driver.findElement(By.name("uid")).sendKeys("Driver 2");
    }

    @Test
    public void executeSessionThree() {
        // Third session of WebDriver
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/V4/");
        driver.findElement(By.name("uid")).sendKeys("Driver 3");
    }
}

TestNG.XML

testng.xml (병렬 메서드)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3" parallel="methods">
  <test name="testGuru">
    <classes>
      <class name="TestGuru99MultipleSession"/>
    </classes>
  </test>
</suite>

테스트 케이스 순서 및 종속성

순서와 종속성을 설정할 수 있습니다. 테스트 사례 실행. 두 개의 테스트 케이스가 있다고 가정해 보겠습니다. testGuru99TC1 testGuru99TC2, 그리고 당신이 원하는 testGuru99TC2 전에 실행하기 testGuru99TC1. 사용 dependsOnMethods 속성(또는 dependsOnGroups 그룹 수준 연결의 경우 해당 순서를 고정합니다. 더 넓은 범위의 경우 자동화 프레임워크 디자인, 비교 JUnit vs TestNG, 그리고 검토 요소 찾기 종속 테스트에서 로케이터를 공유하는 경우 해당 참조를 확인하세요.

testng.xml (메서드에 의존)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" thread-count="3" parallel="methods">
  <test name="testGuru">
    <classes>
      <class name="TestGuru99MultipleSession">
        <include name="testGuru99TC1" dependsOnMethods="testGuru99TC2"/>
        <include name="testGuru99TC2"/>
      </class>
    </classes>
  </test>
</suite>

The TestNG 런타임, 호스팅 위치: 테스트ng.org이 함수는 스레드를 시작하기 전에 이러한 선언을 평가하므로 종속 메서드는 항상 전제 조건이 완료된 후에 시작됩니다.

자주 묻는 질문

세션은 새로운 WebDriver 인스턴스가 생성될 때마다 생성되는 고유한 sessionId입니다. 해당 드라이버의 모든 명령은 일치하는 브라우저 세션으로 연결되어 각 테스트를 서로 분리합니다.

suite 태그의 parallel 속성은 테스트, 클래스, 메서드 또는 인스턴스를 허용합니다. TestNG 스레드 개수(thread-count로 설정)를 여러 개 생성하고 선택한 유닛을 동시에 실행하여 전체 실행 시간을 단축합니다.

testng.xml 파일의 include 태그 안에 dependsOnMethods 속성을 사용하거나 코드에서 @Test(dependsOnMethods = “name”)을 사용하세요. TestNG 필수 조건 테스트를 먼저 실행하고 실패 시 종속 조건 테스트를 건너뜁니다.

AI 도구는 관련 테스트를 그룹화하고, 과거 실행 시간을 기반으로 최적의 스레드 수를 예측하며, 느린 테스트가 먼저 시작되도록 테스트 스위트 순서를 재정렬하여 빌드 파이프라인의 전체 실행 시간을 단축합니다.

예. AI는 호출 그래프와 과거 오류 로그를 분석하여 dependsOnMethods 링크를 제안하고, 순환 종속성을 표시하며, 안전한 병렬 그룹을 제안하여 testng.xml의 수동 유지 관리를 줄여줍니다.

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