为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英4014372 2021-11-17 14:35:54
实际上,我正在创建一个框架,但在创建它时我只希望它用于串行执行,但现在我想对方法进行并行测试。问题是我已将驱动程序实例声明为静态,并且由于静态第二个线程无法更改其值。我正在一个单独的类中创建驱动程序并使用 getter 方法获取它。现在的问题是,如果我将 Webdrive 设为非静态,那么我将无法在其他类中使用该驱动程序。即使我尝试扩展类(我在其中创建驱动程序实例),它也会传递一个空值。所以,基本上我想隔离所有实例,但我不能在本地创建实例到类。我尝试删除静态变量,但在进行并行执行时,打开了 2 个浏览器实例,但所有测试用例都在一个浏览器中执行,而且太并行了我怎样才能做到这一点?
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

您必须为您的应用程序创建类似驱动程序池的东西。您可以从这个池中为您的测试用例启动一堆驱动程序。


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


我过去尝试过类似的事情:


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();

        }

    }

}

我希望它会有所帮助。


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信