2016-05-15 85 views
3

我正在嘗試使用Webdriver Hub和TestNG並行機制設置Webdriver並行執行。我正面臨線程問題使用Selenium Grid for Webdriver + TestNG並行執行問題

我有這個類擴展了TestBaseSetUp,它有一個BeforeMethod和AfterMethod並設置爲始終運行。對於webdriver並行執行,我想使用ThreadLocal,但@Test和@ Before/@ After方法在不同的線程中。因此,如果我在我的TestBaseSetUp中將webdriver設置爲ThreadLocal,並嘗試使用我的測試方法,它將返回null。

public class TestCheck extends TestBaseSetUp { 
    @Test 
    public void test(){ 
      System.out.println("Thread in test " + Thread.currentThread().getId()); 

}}

我們有沒有辦法讓@Test也是相同的線程中@前/ @方法

回答

0

@Manish_pat

看看我的這個博客帖子:https://rationaleemotions.wordpress.com/2013/07/31/parallel-webdriver-executions-using-testng/ 的想法是從依靠配置方法網絡驅動程序安裝到移開一個TestNG監聽器驅動模型,其中webdriver對象是從beforeInvocation()中創建的,並在afterInvocation()中銷燬。 TestNG保證beforeInvocation(),@Test和afterInvocation()將始終在同一個線程上執行。所以現在你可以在這裏繼續使用ThreadLocal。

+0

感謝您的回覆。我將檢查鏈接,但我想知道在這種情況下我將如何使用BeforeMethod和AfterMethod等。除了Test註釋之外,我將不得不離開testNG的所有這些優秀功能,因爲它們與Test不在同一個線程中。對這些的任何建議。 –

+0

如果我的建議適合你,請幫忙接受答案。 要回答你的問題,我不認爲BeforeMethod,Test,AfterMethod運行在不同的線程上。我在testng google論壇上回答了您的問題,並附上了一個示例。 https://groups.google.com/d/msg/testng-users/8XYt-El2_JU/o5Mm6gklAQAJ –

0

做你試圖

@Test(singleThreaded=true) 

在後職業水平。以便該類中的所有測試方法都將在同一個線程上運行。 here是例如

謝謝你, 穆拉利

+0

感謝Murali的迴應。但我想知道這將如何解決這個問題。我的問題是,在我的TestBaseSetUp BeforeMethod中,我創建了ThreadLocal驅動程序並嘗試在Test方法中使用它,但由於BeforeMethod和Test方法不在同一個線程中,它不起作用。 –

+0

嗯......有點困惑。看看你是否使用上面的註釋類中的所有測試方法將按照每個文檔相同的線程運行,如果我沒有錯。所以使用TestBaseSetUp類中的普通方法來創建線程並在你的類中調用該線程可能在BeforeTest下。所以在這個類中的BeforeTest,Test等將使用相同的線程。 –

相關問題