使用selenium在java中使用testng进行并行测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用selenium在java中使用testng进行并行测试相关的知识,希望对你有一定的参考价值。

实际上,我正在创建一个框架,但在创建它时我只想将它用于串行执行,但现在我想对方法进行并行测试。问题是我已经将驱动程序实例声明为静态,并且因为静态第二个线程无法更改其值。

我在一个单独的类中创建驱动程序并使用getter方法获取它。

现在的问题是,如果我将Webdrive变为非静态,那么我就无法在其他类中使用该驱动程序。

即使我尝试扩展类(我在创建驱动程序实例的地方),它也会传递一个空值。

所以,基本上我想隔离所有实例但我不能在本地创建实例。我尝试删除静态变量,但在执行并行执行时,会打开2个浏览器实例,但是在一个浏览器中执行所有测试用例并且太平行

我怎样才能做到这一点?

答案

您必须为您的应用程序创建类似Driver Pool的内容。您可以从此池中为您的测试用例启动一堆驱动程序。

另外,请考虑如何取消静态驱动程序实例。

我过去尝试过类似的东西:

public class DriverPool {

    public static final int MAX_NUMBER = 5;

    private static final Object waitObj = new Object();
    private static AtomicInteger counter = new AtomicInteger(0);
    private static Logger log = Logger.getLogger(DriverPool.class);

    private static volatile ThreadLocal<WebDriver> instance = ThreadLocal
            .withInitial(DriverManager::getInstance);

    public static synchronized WebDriver getDriver() {
        try {
            while (counter.get() > MAX_NUMBER) {
                synchronized (waitObj) {
                    waitObj.wait();
                }
            }
            counter.getAndIncrement();
        } catch (InterruptedException e) {
            log.error(e);
        }

        return instance.get();
    }

    public static synchronized void closeDriver() {
        WebDriver driver = instance.get();

        driver.close();
        driver.quit();

        instance.remove();
        counter.decrementAndGet();
        synchronized (waitObj) {
            waitObj.notifyAll();
        }
    }
}

我希望它会有所帮助。

以上是关于使用selenium在java中使用testng进行并行测试的主要内容,如果未能解决你的问题,请参考以下文章

Mac系统搭建java+selenium+testng环境

selenium第一课(selenium+java+testNG+maven)

selenium+java+testNG+maven环境搭建

TestNG的简单使用

java+selenium+testng+reportng+jenkins自动化环境搭建

selenium+testng+java+poi进行excel的数据参数化