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

스크립트를 병렬로 실행하는 방법을 이해하려면 먼저 다음 사항을 알아야 합니다. Selenium 세션을 통해 각 브라우저를 격리합니다.
세션 처리가 필요한 이유는 무엇입니까?
테스트 실행 중에는 Selenium WebDriver는 주어진 명령을 실행하기 위해 모든 단계에서 브라우저와 상호 작용해야 합니다. 테스트가 실행되는 동안 다른 사용자가 동일한 컴퓨터와 동일한 유형의 브라우저에서 두 번째 스크립트를 실행할 수 있습니다.
이러한 상황에서는 두 실행이 겹치지 않도록 하는 메커니즘이 필요합니다. Selenium 이 문제는 세션 처리를 통해 해결됩니다.
세션 처리를 달성하는 방법 Selenium 웹드라이버?
검사해 보시면 Selenium WebDriver 소스 코드에서 다음과 같은 변수를 찾을 수 있습니다. sessionId새로운 WebDriver 인스턴스를 생성할 때마다 새로운 인스턴스가 생성됩니다. sessionId 생성되어 해당 항목에 첨부됩니다. Firefox크롬 또는 IE 드라이버.
이후의 모든 명령은 해당 브라우저 세션 내에서만 실행됩니다.
WebDriver에 이 기능이 내장되어 있으므로 sessionId를 수동으로 할당할 필요가 없습니다.
Code 예: 두 개의 WebDriver 인스턴스에 대해 서로 다른 두 개의 세션이 생성됩니다.
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 스위트 태그가 그 역할을 합니다.
suite 태그의 parallel 속성은 네 가지 값을 허용합니다.
| 속성 값 | 의미 |
|---|---|
| 테스트 | 전부의 테스트 케이스 내부 태그 테스트 XML 파일이 병렬로 실행됩니다. |
| 수업 | 내부의 모든 테스트 케이스 Java 수업은 병렬로 실행됩니다. |
| 방법 | @Test 어노테이션이 붙은 모든 메서드는 병렬로 실행됩니다. |
| 인스턴스 | 같은 인스턴스 내의 테스트는 병렬로 실행되지만, 서로 다른 두 인스턴스의 두 메서드는 서로 다른 스레드에서 실행됩니다. |
The thread-count 이 속성은 해당 실행에 할당될 스레드 수를 결정합니다. 이 속성을 다음 속성과 함께 사용하세요. TestNG 뼈대 설치 TestNG in Eclipse 실행하기 전에. 단일 머신을 넘어 확장하려면 동일한 스위트를 통해 라우팅하십시오. Selenium 그리드 4 분산 병렬 실행을 위해.
전체 예시: 세 개의 테스트 케이스가 병렬로 실행되어 로그인 데이터를 채웁니다. https://demo.guru99.com/.
전체 프로젝트는 다음과 같습니다.
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
<?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, 그리고 검토 요소 찾기 종속 테스트에서 로케이터를 공유하는 경우 해당 참조를 확인하세요.
<?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이 함수는 스레드를 시작하기 전에 이러한 선언을 평가하므로 종속 메서드는 항상 전제 조건이 완료된 후에 시작됩니다.





