스크립트를 병렬로 실행하는 방법을 이해하려면 먼저
세션 처리가 필요한 이유는 무엇입니까?
테스트 실행 중에 Selenium WebDriver는 항상 주어진 명령을 실행하기 위해 브라우저와 상호 작용해야합니다. 실행시 현재 실행이 완료되기 전에 다른 사람이 같은 컴퓨터에서 동일한 유형의 브라우저에서 다른 스크립트의 실행을 시작하는 것도 가능합니다.
그러한 상황에서, 우리는 두 가지 다른 실행이 서로 겹쳐서는 안되는 메커니즘이 필요합니다. Selenium에서 Session Handling을 사용하여이를 수행 할 수 있습니다.
Selenium WebDriver에서 세션 처리를 달성하는 방법?
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 ){ // WebDriver의 첫 번째 세션 WebDriver driver = new FirefoxDriver(); // goto guru99 사이트로 이동 driver.get("http://demo.guru99.com/V4/"); // WebDriver의 두 번째 세션 WebDriver driver2 = new FirefoxDriver(); // goto guru99 사이트로 이동 driver2.get("http://demo.guru99.com/V4/"); } }
병렬로 스크립트 실행
여러 테스트를 동시에 실행하려는 경우가 있습니다.
그러한 경우, "병렬"속성을 사용할 수 있습니다
suite 태그의 parallel 속성은 다음 네 가지 값을 허용 할 수 있습니다.
검사들 | Testing xml 파일 의 <test> 태그 안의 모든 테스트 케이스 는 병렬로 실행됩니다. |
수업 | Java 클래스 내의 모든 테스트 케이스 는 병렬로 실행됩니다. |
행동 양식 | @Test 주석이있는 모든 메소드는 병렬로 실행됩니다. |
인스턴스 | 동일한 인스턴스의 테스트 케이스가 병렬로 실행되지만 두 인스턴스가 서로 다른 두 개의 메소드가 다른 스레드에서 실행됩니다. |
thread-count 속성 은이 실행을 위해 할당되어야하는 스레드 수를 지정할 수있게합니다.
전체 예제 :이 예제에서는 세 개의 테스트 케이스가 http://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(){ // WebDriver의 첫 번째 세션 System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); // goto guru99 사이트로 이동 driver.get("http://demo.guru99.com/V4/"); /// 사용자 이름 텍스트 상자를 찾아서 채웁니다. driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo(){ // WebDriver의 두 번째 세션r System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); // goto guru99 사이트로 이동 driver.get("http://demo.guru99.com/V4/"); // 사용자 이름 텍스트 상자를 찾아서 채웁니다. driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ // WebDriver의 세 번째 세션 System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); // goto guru99 사이트로 이동 driver.get("http://demo.guru99.com/V4/"); // 사용자 이름 텍스트 상자를 찾아서 채웁니다. driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.XML
http://testng.org/testng-1.0.dtd">
테스트 케이스 순서 및 종속성
테스트 케이스 실행 의 순서 및 종속성을 설정할 수 있습니다 .
'testGuru99TC1'과 'testGuru99TC2'의 두 가지 테스트 케이스가 있고 'testGuru99TC1'앞에 'testGuru99TC2'테스트 케이스를 실행하려고한다고 가정합니다. 이 경우 'dependsOnMethods'속성을 사용하여 종속성과 실행 순서를 지정합니다.
<? xml version = "1.0"encoding = "UTF-8"?> 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가 만들어집니다.
- 하나의 세션은 특정 브라우저와 바인딩됩니다.
- 속성 스레드와 병렬을 사용하여 스크립트를 병렬로 실행합니다.
- 특성 종속성을 사용하여 실행을 테스트하도록 순서를 설정할 수 있습니다.
'Python > Web crowling' 카테고리의 다른 글
selenium 새 창 로딩될 때까지 기다리기 anther method (0) | 2020.02.10 |
---|---|
selenium 새 창 로딩될 때까지 기다리기 (0) | 2020.02.10 |
[ selenium의 webdriver() / implicitly_wait() / WebDriverWait() + EC + By ==> bs4 ]를 이용한 연결된 페이지를 타고가서/기다렸다가 추가정보를 scrapping하는 crawling (0) | 2020.02.09 |
window,mac selenium 새 탭 열기 및 탭 전환 (0) | 2020.02.09 |
열려있는 chrome에서 크롤링 (4) | 2020.02.09 |