병렬 실행 Selenium: 세션 처리 및 TestNG 의존
스크립트를 병렬로 실행하는 방법을 이해하려면 먼저
세션 처리가 필요한 이유는 무엇입니까?
테스트 실행 중에는 Selenium WebDriver는 주어진 명령을 실행하기 위해 항상 브라우저와 상호 작용해야 합니다. 실행 시 현재 실행이 완료되기 전에 다른 누군가가 동일한 시스템 및 동일한 유형의 브라우저에서 다른 스크립트의 실행을 시작할 수도 있습니다.
이러한 상황에서는 서로 다른 두 가지 실행이 서로 겹치지 않도록 하는 메커니즘이 필요합니다. 이는 세션 처리를 사용하여 달성할 수 있습니다. Selenium.
세션 처리를 달성하는 방법 Selenium 웹드라이버?
소스코드를 확인해보면 Selenium WebDriver를 실행하면 'sessionId'라는 변수를 찾을 수 있습니다. WebDriver 객체의 새 인스턴스를 생성할 때마다 새로운 'sessionId'가 생성되어 해당 특정 인스턴스와 연결됩니다. Firefox/Chrome/IE 드라이버().
따라서 이후에 수행하는 모든 작업은 해당 특정 항목에서만 실행됩니다. Firefox 브라우저 세션.
이는 내장된 기능이므로 세션 ID를 명시적으로 할당할 필요가 없습니다.
코드 예 : 여기서는 두 개의 서로 다른 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(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("https://demo.guru99.com/V4/"); } }
병렬 테스트를 실행하는 방법 Selenium
여러 테스트를 동시에 실행하고 싶은 상황이 있습니다.
이러한 경우 "병렬" 속성을 사용할 수 있습니다.
suite 태그의 병렬 속성은 다음 네 가지 값을 허용할 수 있습니다.
테스트 | 내부의 모든 테스트 케이스 태그 지원 xml 파일이 병렬로 실행됩니다. |
수업 | 내부의 모든 테스트 케이스 Java 수업은 병렬로 진행됩니다 |
방법 | @Test 주석이 있는 모든 메서드는 병렬로 실행됩니다. |
인스턴스 | 동일한 인스턴스의 테스트 케이스는 병렬로 실행되지만 두 개의 서로 다른 인스턴스의 두 가지 메서드는 서로 다른 스레드에서 실행됩니다. |
thread-count 속성을 사용하면 이 실행에 할당해야 하는 스레드 수를 지정할 수 있습니다.
전체 예: 이 예에서는 세 가지 테스트 사례가 병렬로 실행되어 로그인 데이터를 채웁니다. https://demo.guru99.com/
전체 프로젝트는 다음과 같습니다:
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find 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(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it 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"> </class> </classes> </test> </suite>
테스트 케이스 순서 및 종속성
순서와 종속성을 설정할 수 있습니다. 테스트 케이스 실행.
'testGuru99TC1'과 'testGuru99TC2'라는 두 개의 테스트 케이스가 있고 'testGuru99TC2' 이전에 'testGuru99TC1' 테스트 케이스를 실행한다고 가정해 보겠습니다. 이 경우 'dependentOnMethods' 속성을 사용하여 종속성과 실행 순서를 만듭니다.
<?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 value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
제품 개요
- WebDriver의 새 인스턴스에 대해 새 sessionID가 생성됩니다.
- 하나의 세션은 하나의 특정 브라우저와 바인딩됩니다.
- 속성 스레드와 병렬을 사용하여 스크립트를 병렬로 실행합니다.
- 속성 종속성을 사용하여 실행 테스트 순서를 설정할 수 있습니다.