Нужна консультация (совет) опытных коллег по следующему вопросу:
Иммеется самописный фреймворчик (на основе junit + selenide +allure + всякая мелочь), в котором в той или иной форме реализован подход Page Object.
Суть в том, что управление веб драйвером, а именно его создание/закрытие, создание дополнительного (если требуется) ложится на пользователя. Основным минусом является выполнение веб драйвера в том же потоке что и тесты, т.е. повис вебдрайвер - и все… прибить его некому, а если ставить timeout в junit то при попытке обратиться к веб драйверу все виснет.
В общем глобальная идея такая: написать механизм, который будет контролировать (создавать (идельно в новом потоке), закрывать, прибивать) все веб драйвера, даже если их буд несколько, безопасно и удобно для пользователей-тестеровщиков.
Подскажите, плз, куда смотреть, что почитать и вообще надо ли такой механизм или все уже давно готово, а я пытаюсь изобрести велосипед?
З.Ы. С сусиком немного знаком, но от него пришлось уйти.
Для тестирования сайта была необходимость заходить на другой (сторонний) сайт и потом сверять данные. На стороннем сайте из-за непонятных причин (не регулярно!) подвисал фаер фокс. Причем подвисал так, что любое обращение к обьекту WebDriver (даже самое елементарное - driver.getCurrenUrl()) приводило к зависанию теста. “Коматоз” фаерфокса снимался только через диспетчер задач.
На тот момент был найден выход - для сбора данных со стороннего сайта в новом потоке создавался новый вебдрайвер, который шел и выполнял указанный набор действий. Основной же поток, в котором выполняются тесты, просто ждал пока флаг, разрешающий забрать данные, собранне вторым ФФ, будет установлен в “тру”. Если етого не происходило через определенное время, то основной поток просто убивал “дочерний”, а вмести с ним и подвисшый ФФ.
Для избежания таких ситуаций в будущем, появилась идея создания универсального механизма, который бы обезопасил тесты от зависания браузера (фф, хром…).
А не существует возможности дёргать нужные вам данные через некий АПИ/get запросом банальным? ИМХО, создаёте проблему лишнюю. Вообще, отклоняясь немного от темы, окольными путями добывать тестовые данные - плохая практика
Привет!
Вообще-то одна из задач Selenide как раз в том и состоит, чтобы взять на себя заботу о браузере: вовремя открыть, вовремя закрыть. Если чего-то в Selenide не хватает, говорите - давайте дополним.
Кстати, в Selenide есть даже механизм борьбы с зависанием браузера - правда, он пока в “бета”-статусе, т.к. до конца не отлажен.
P.S. Присоединяюсь к @furiousduck: окольными путями добывать тестовые данные - плохая практика. Ваш тест должен сам подготавливать все необходимые данные.
Спасибо всем за советы.
Но никаких окольных путей, в плане добычи данных, нет. Я б с удовольствием дерагал бы койнить апи, но увы, данные нужны с “морды” стороннего сайта. Заход на сторонний сайт и получение данных - ето как раз и есть один из етапов сбора тестом данных, которые потом сравниваются.
Возвращаясь к механизму работы с драйвером, а есть более детальная информация про ету функцию Selenide? Где можно про нее прочитать и когда ее ожидать?
Всё равно не соглашусь с вами. Выходит, вы фактически тестируете нечто в боевых условиях, а лишние зависимости в тесте (а вдруг упал тот сайт, с которого вы тянете данные), увеличивают вероятность ложных падений. Совсем по-бразильски можно сделать какой-то эталонный набор данных (один раз посмотреть, что вы получаете с этого сайта) и на него в тестах опираться, а в своём приложении уже на худой конец похачить что-нить, чтобы данные эти подсунуть куда нужно.
Но если вы уж действительно тестируете продакшен - то это отдельная благодатная тема для дискусси
WebDriverRunner.webdriverContainer = new WebDriverThreadLocalContainerWithTimeouts();
Он тогда выполняет открытие и закрытие браузера в отдельном потоке с таймаутом. Правда, вот некоторые пользователи стали жаловаться, что у них браузер перестал закрываться. А у нас работало. В общем, отключили пока до лучших времён.
Кстати создание интерфейса для двух реализаций, позволило мне написать свою )) интерфейс был не очень удобен, но мне с кое какими хаками удалось написать то что мне подходит ))