2014-04-07 3 views
0

동일한 클래스에 속하는 두 개의 메소드를 병렬로 실행하려고합니다. 내 코드는 두 개의 개별 브라우저를 시작하지만 첫 번째 메소드가 완료되면 특정 브라우저를 종료하는 대신 다른 브라우저를 종료합니다.TestNG를 사용하여 Selenium을 병렬로 실행하는 방법?

방법 A - 브라우저 A - 브라우저 B - - 그것은 20 초

방법 B 소요 말은 40초

소요 말 방법 A가 완료되면 , 그것은 B 대신 브라우저 A.

의 브라우저를 죽이고

: 여기
public class AccountTest { 

    private WebDriver driver; 

    @BeforeMethod(alwaysRun=true) 
    public void initializeDriver() throws MalformedURLException { 
     driver = new FirefoxDriver(); 
     driver.manage().deleteAllCookies(); 
     driver.manage().window().maximize(); 
    } 

    @Test(groups="Login") 
    public void loginTest() { 
     HomePage homePage = new HomePage(driver); 
     SignInPage signInPage = homePage.signIn(); 
     signInPage.signIn("[email protected]", "abcd1234"); 
    } 


    @Test(groups="Register") 
    public void registerTest() { 
     HomePage homePage = new HomePage(driver); 
     SignInPage signInPage = homePage.signIn(); 
     RegisterPage registerPage = signInPage.register(); 
     registerPage.register(); 
    } 

    @AfterMethod(alwaysRun=true) 
    public void tearDown() { 
     driver.quit(); 
    } 
} 

내 testng.xml입니다 : 여기

내 코드입니다

현재 그리드를 사용하고 있지 않습니다. 내 지역에서이 작업을 시도하지만 Saucelab을 사용하여 병렬 테스트를 진행합니다.

무엇이 잘못 되었습니까?

미리 감사드립니다.

답변

1

TestNG는 수업을 한 번만 인스턴스화합니다. 따라서 @BeforeMethod 메서드가 실행될 때마다 드라이버 필드를 덮어 씁니다.

변경하려면 클래스를 병렬로 실행하거나 @DataProvider을 드라이버에 전달하도록 설정할 수 있습니다.

+0

안녕하세요 Nathan, 응답 해 주셔서 감사합니다. 각 메서드에 대해 별도의 클래스를 만들려고 시도했지만 작동했지만 앞으로 동일한 클래스에있는 여러 메서드를 실행해야 할 수도 있습니다. AfterMethod를 점검했고 dataProvider를 매개 변수로 사용하지 않습니다. 해당 특수 효과에 대해 자세히 설명해 주시겠습니까? 고마워요 – Jail

+0

당신은 수업에서 여러 가지 방법을 가질 수 있지만, 나는 그들을 병렬로 실행하지 않는 것이 좋습니다. '@ DataProvider'를 사용하고 싶다면'@ AfterClass'에서 모든 드라이버를 닫아야합니다. 나는 어떤 메소드가 데이터 제공자를 받아들이는지, 어떤 메소드는 받아들이지 않는지에 대해서는 확실하지 않다. –

+0

클래스별로 청크하면 TestNG와 Selenium을 사용하면 훨씬 쉽다는 것을 알게되었습니다. '@ BeforeClass'를 인스턴스화하고,'@ AfterClass'를 닫고, 클래스와 병렬 처리하십시오. 여러 드라이버를 사용하려면 공장을 사용하는 것이 좋습니다. –