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

Снижение стабильности тестов при параллельном выполнении

maven
parallel
junit
execution
jenkins
allure
selenide
java
Теги: #<Tag:0x00007f7b704d3da0> #<Tag:0x00007f7b704d3c60> #<Tag:0x00007f7b704d3b20> #<Tag:0x00007f7b704d39e0> #<Tag:0x00007f7b704d3878> #<Tag:0x00007f7b704d36e8> #<Tag:0x00007f7b704d35a8> #<Tag:0x00007f7b704d33f0>

(Stan) #21

Docker создает подобие chroot со своим собственным воркспейсом и предустановленным environment (делайте аналогию с виртуалкой, которая поднимается с нужной конфигурацией за пару секунд). По сути на одной виртуалке (или реальной машине) в зависимости от ее мощности можно запустить несколько докер контейнеров, которые будут полностью изолированы друг от друга + иметь четко предустановленный environment. У нас мы обычно запускаем по контейнеру на каждый виртуальный cpu. Тест отработал, отдал результаты, докер закончил работу, можно сразу же запускать другой. Кстати очень удобно работать с SWARM - https://docs.docker.com/swarm/ (https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin) , по сути сервер, который сам распределяет и поднимает докер контейнеры на нужных машинах и в нужных конфигурациях, так что вам вообще не надо думать о поднятии докера в каждой джобе.


(GorDi) #22

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


(Stan) #23

Только примите этот ответ за ОЧЕНЬ грубое описание :slight_smile: Потому что если вдаваться в подробности, то докер это просто удобная тулза для управления линукс контейнерами, которым уже больше 5 лет (https://en.wikipedia.org/wiki/LXC) и как правильно замечено в описании в вики - это виртуализация на уровне операционной системы без виртуальной машины.


(Ok Tober) #24

Я когда пускал через грид 10 потоков - валилось все и постоянно, уменьшил до 5ти - начало работать стабильно, попробуйте просто уменьшить кол-во потоков , если проблема не исчезнет- значит ищите её в чем-ьо другом.


(Рома Маринский) #25

как у вас дела с описаной проблемой на данный момент? Решили вопрос стабильности?


(GorDi) #26

Не-а :frowning:
Даже при снижении количества потоков есть тесты которые себя не стабильно ведут. Симптомы те же, как описано в заголовке.

В отдельных случаях помогает просто “зацикливание” определенных действий. Т.е. к примеру: “навести мышу на елемент -> проверить что новый елемент появился -> если да - вышли, если нет -> снова навести мышу”. Но такое дублирование крайне избыточно.

Думаю, что вопрос в плагине, который “рисует” “морду”. Каким-то “волшебным” образом браузер получает команду о том, что страница загружена, а елементы либо отсутствуют либо взаимодействие с ними не дает ни какого результата. Во втором случае даже никакого исключения не вылетает, просто тест падает из-за неверно настроенного окружения ну или из-за неправильных результатов. Т.е. WebDriver абсолютно “уверен” в том, что он клацнул на елемент и ввел текст ну или выставил значение в выпадающем списке. На самом деле ничего подобного не произошло. Селенид со своими красивыми ожиданиями тоже бессилен…

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


(Stan) #27

Описанного Вами в принципе не может быть.


(Sergey Korol) #28

Когда я слышу “драйвер уверен, но ничего не произошло”, на ум сразу приходит неправильное взаимодействие с элементами. Просто многие либо напрочь игнорируют сопутствующие логи, либо “хэндлят” экспепшены с пустыми кэтчами, либо просто не замечают особенности работы кастомных компонентов… Уверен, что в результате детального анализа, наружу всплыло бы множество занимательных нюансов.


(GorDi) #29

Сам в шоке :frowning:

Вот етим и буду заниматься. Спасибо.


(Алексей Бобруцков) #30

Подскажите, пожалуйста, а как Вы реализуете параллельный запуск? Я новичёк в многопоточности, быть может есть какие то статьи или заметку на тему параллельных автотестов?


(Sergey Korol) #31

В данном докладе первая тема как раз об основных граблях при использовании многопоточности. Ну и сопутствующая ссылка на GitHub с примерами.


(Алексей Бобруцков) #32

Спасибо, очень интересный доклад, как начинающему, многое не понятно, но подача материала отменная


(Pavel Ponomaryov) #33

У нас Jenkis на машине с 8 процессорами. Более менее стабильно бегут 5 потоков параллельно (всё в докер контейнерах). Всегда надо оставлять запас. Таймауты могут быть к тому же потому, что неправильно реализовано ожидание готовности элемента (как вы проверяете, что страница полностью загрузилась?).

PS. А Selenide-то давно пора обновить :slight_smile:


(Sergey Korol) #34

А вы что, запускаете контейнеры с тестами прямо на Jenkins тачке?


(Pavel Ponomaryov) #35

пока что так, да.


(asolntsev) #36

Я потерял нить повествования, откуда в этом обсуждении появился Selenide? :slight_smile:
И что именно нужно обновить?


(Pavel Ponomaryov) #37

Это я комментировал то, что дано в первом посте у автора. У него версия 2.23


(Sergey Korol) #38

А то, что автор создавал тему год назад, вас значит не смутило?


(Pavel Ponomaryov) #39

lol, не думал, что настолько старую тему кто-то поднимет :smiley:


(Roma Marinsky) #40

Любая тема поднимается если в ней пишут)