2015-10-02 94 views
1

使用selenium網格與TestNg運行並行測試,@BeforeTest方法似乎在同一個線程上啓動兩個測試,任何想法爲什麼?我試圖確保每個測試類都從它自己的線程開始。硒網格,測試開始在同一線程並行運行時開始

@BeforeTest(alwaysRun = true) 
@Parameters({ "selenium.OS", "selenium.browser","selenium.testClassNameHere" }) 
public void beforeTest(String OS, String browser, String testClassNameHere) { 
    Out.trace("Starting beforeTest for "+testClassNameHere+" on thread: " + Thread.currentThread().hashCode()); 
    //create driver here 
    Out.trace("beforeTest has finished"); 
} 

然而,這裏是對數圖中,兩個試驗班開始在同一個線程,並獲得創建只有兩個驅動程序,這會引發各種與聽衆和報告頭痛。

TRACE: Starting beforeTest for AcceptanceTests.ErrorReportingTests on thread: 777376239 
TRACE: Starting beforeTest for AcceptanceTests.PopupTests on thread: 777376239 
TRACE: Starting beforeTest for AcceptanceTests.LoginPageTests on thread: 1235740568 
TRACE: Finished making driver. 
TRACE: Finished making driver. 
TRACE: beforeTest has finished 
TRACE: beforeTest has finished 

這裏顯示三個測試類的ANT XML文件...

<?xml version="1.0"?> 
<suite name="Debugging QA Tests" parallel="tests" thread-count="10"> 
    <test name="Popup Tests" preserve-order="true" > 
     <parameter name="selenium.OS" value="localhost" /> 
     <parameter name="selenium.browser" value="chrome" /> 
     <parameter name="selenium.testClassNameHere" value="AcceptanceTests.PopupTests" /> 
     <classes> 
      <class name="qaautomation.AcceptanceTests.PopupTests" /> 
     </classes> 
    </test> 
    <test name="Login Page Tests" preserve-order="true"> 
     <parameter name="selenium.OS" value="localhost" /> 
     <parameter name="selenium.browser" value="chrome" /> 
     <parameter name="selenium.testClassNameHere" value="AcceptanceTests.LoginPageTests" /> 
     <classes> 
      <class name="qaautomation.AcceptanceTests.LoginPageTests" /> 
     </classes> 
    </test> 
    <test name="Error Reporting Tests" preserve-order="true"> 
     <parameter name="selenium.OS" value="localhost" /> 
     <parameter name="selenium.browser" value="chrome" /> 
     <parameter name="selenium.testClassNameHere" value="AcceptanceTests.ErrorReportingTests" /> 
     <classes> 
      <class name="qaautomation.AcceptanceTests.ErrorReportingTests" /> 
     </classes> 
    </test> 
</suite> 

回答

0

在哪一個類你定義beforeTest方法。 我創建了相同的結構,下面的代碼在不同的線程上爲我工作。

public class TestCase { 

    @BeforeTest(alwaysRun = true) 
    @Parameters({ "selenium.OS", "selenium.browser","selenium.testClassNameHere" }) 
    public void beforeTest(String OS, String browser, String testClassNameHere) { 
     System.out.println("Starting beforeTest for "+testClassNameHere+" on thread: " + Thread.currentThread().hashCode()); 
     //create driver here 
     System.out.println("beforeTest has finished"); 
    } 
} 

public class PopupTests extends TestCase{ 

    @Test(description="popup reporting") 
    public void teszt() 
    { 
     System.out.println("popup"); 
    } 
} 
public class ErrorReportingTests extends TestCase{ 

    @Test(description="error reporting") 
    public void teszt() 
    { 
     System.out.println("Error"); 
    } 
} 

public class LoginPageTests extends TestCase { 

    @Test(description="login reporting") 
    public void teszt() 
    { 
     System.out.println("Login"); 
    } 
} 

我已經使用了相同的testng xml配置文件,下面是我的輸出。

Starting beforeTest for AcceptanceTests.ErrorReportingTests on thread: 1968879864 
beforeTest has finished 
Starting beforeTest for AcceptanceTests.LoginPageTests on thread: 88161428 
beforeTest has finished 
Starting beforeTest for AcceptanceTests.PopupTests on thread: 1040963230 
beforeTest has finished 
Login 
popup 
Error