Параллельное тестирование с использованием Tesng в Java с использованием селена - PullRequest
0 голосов
/ 14 октября 2018

На самом деле, я создавал один фреймворк, но при его создании я просто хотел использовать его для последовательного выполнения, но теперь я хочу провести параллельное тестирование для методов.Проблема в том, что я объявил экземпляр драйвера как статический и из-за статического 2-го потока не может изменить его значение.

Я создаю драйвер в отдельном классе и извлекаю его, используя метод getter.

Теперь проблема в том, что если я сделаю Webdrive нестатичным, то я не смогу использовать драйвер вдругие классы.

Даже если я пытаюсь расширить класс (где я создаю экземпляр драйвера), он пропускает нулевое значение.

Итак, в основном я хочу изолировать весь экземпляр, но не могу сделать экземпляр локально для класса.Я попытался удалить статические переменные, но при выполнении параллельного выполнения открывается 2 экземпляра браузера, но выполнение происходит в одном браузере для всех тестовых случаев, и это слишком параллельно

Как мне этого добиться?

1 Ответ

0 голосов
/ 14 октября 2018

Вы должны создать что-то вроде пула драйверов для своего приложения.И вы можете запустить кучу ваших драйверов из этого пула для ваших тестовых случаев.

Кроме того, подумайте о том, как восстановить статический экземпляр вашего драйвера.

Я пробовал нечто подобное в прошлом:

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

Надеюсь, это будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...