繁体   English   中英

使用线程在TestNG中测试多个类的执行

[英]Test execution with multiple classes in TestNG using threads

我试图在我的TestNG项目中运行多个类,但是其中一个类总是失败。

AbstractTest.java (sampleTest1和sampleTest2类仅包含一个带有get()方法的@Test)

public class AbstractTest {

  private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
  private ThreadLocal<WebDriver> driverThread;

  @BeforeTest
  public void beforeTest()
  {
    this.driverThread = new ThreadLocal<WebDriver>() {
      @Override
      protected WebDriver initialValue() {
        final WebDriver webDriver = new FirefoxDriver();
        webDriverPool.add(webDriver);
        return webDriver;
      }
    };
  }

  @AfterTest
  public void afterTest() {
    for (WebDriver driver : this.webDriverPool) {
      driver.quit();
    }
  }

  public WebDriver getDriver() {
    return this.driverThread.get();
  }

}

的testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="11" name="testSuite" parallel="tests">
    <test name="Test1" group-by-instances="true">
        <classes>
            <class name="test.sample.sampleTest1" />
            <class name="test.sample.sampleTest2" />
        </classes>
    </test> <!-- Test1 -->
</suite> <!-- testSuite -->

问题是该线程之一看不到WebDriver,并且返回null并失败。 我知道,如果将ThreadLocal更改为static,它将起作用,但是如果我并行运行测试,它将引起更多问题,我的目标是:)

提前致谢!

使用其他使用ThreadLocal的方法。 例如,一种线程安全的单例实现可以帮助:

public class DriverSession
{
    private static ThreadLocal<DriverSession> instance = new ThreadLocal<DriverSession>();
    private WebDriver                  driver;

    public static DriverSession getInstance()
    {
        if (null == instance.get())
        {
            instance.set(new Proxy1());
        }
        return instance.get();
    }

    protected DriverSession()
    {
        driver = new FirefoxDriver();
    }

    public WebDriver getDriver()
    {
        return this.driver;
    }
}

这就是我的方法。 因此,为了访问当前驱动程序实例,请使用:

DriverSession.getInstance().getDriver().get("http://google.com");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM