Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Запуск тестов с разными FF profile


(Александр Беликов) #1

Всем привет!

Имеются 2 класса тестов, которые одновременно дергают метод инициализации (данные считываются из json, преобразуются в модель, поля заполняются произвольными значениями). В результате чего наблюдаются падения тестов, при валидации полей моделей. Тесты запускаются на CI в 2 потока. По всей видимости, стартует один браузер с одним и тем же профилем, отсюда и неразбериха. Как можно это обойти? Мысль такая, что нужно для каждого потока создавать свой профиль, и на нем гонять, чтобы не было таких пересечений. Только вот как это реализовать, пока вопрос.


(heartwilltell) #2

Дело тут не в профилях. Покажите как вы храните драйвер и как передаете его до метода на котором падают тесты.


(Александр Беликов) #3

Инициализация драйвера:

public WebDriver getWebDriver() throws IOException {
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.setPreference("print.always_print_silent", true);
firefoxProfile.setPreference("print.show print progress", false);
firefoxProfile.setEnableNativeEvents(false);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setBrowserName("firefox");
capabilities.setCapability("firefox_profile", firefoxProfile.toJson());
capabilities.setJavascriptEnabled(true);
WebDriver driver = new RemoteWebDriver(new URL("http://192.168.123.11:4444/wd/hub"), capabilities);
driver.manage().window().setPosition(new Point(0, 0));
driver.manage().window().setSize(new Dimension(1440, 900));
return driver; 

}

В раннере аннотирован метод @BeforeClass, в котором происходит вызов new ApplicationManagerImpl(). А внутри ApplicationManagerImpl() - driver = new WebDriverFactory().getWebDriver();


(Александр Беликов) #4

Видимо действительно, дело не в профилях, так как браузеры стартуют разные. Вывожу sessionId для каждого потока, и они различны.

SessionId = ac20b37d-8e32-49b0-8f26-8c48f77d3ad7 - первый поток
SessionId = 70c2fb41-0d5e-4814-b96b-ac04679493f5 - второй поток

@heartwilltell, так в чем же дело?


(heartwilltell) #5

В том что вы где-то не позаботились о потокобезопасности. Как минимум делайте ваш метод synchronized.


(Александр Беликов) #6

сделал synchronized - не помогло


(heartwilltell) #7

А чем запускаете тесты? JUnit testNG?
Покажите класс инициализирующий драйвер и как вы его передаете в тест


(Александр Беликов) #8

TestNG.