2016-05-15 81 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等将使用相同的线程。 –

相关问题