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

Docker создает подобие chroot со своим собственным воркспейсом и предустановленным environment (делайте аналогию с виртуалкой, которая поднимается с нужной конфигурацией за пару секунд). По сути на одной виртуалке (или реальной машине) в зависимости от ее мощности можно запустить несколько докер контейнеров, которые будут полностью изолированы друг от друга + иметь четко предустановленный environment. У нас мы обычно запускаем по контейнеру на каждый виртуальный cpu. Тест отработал, отдал результаты, докер закончил работу, можно сразу же запускать другой. Кстати очень удобно работать с SWARM - Swarm mode overview | Docker Documentation (Swarm) , по сути сервер, который сам распределяет и поднимает докер контейнеры на нужных машинах и в нужных конфигурациях, так что вам вообще не надо думать о поднятии докера в каждой джобе.

1 лайк

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

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

1 лайк

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

1 лайк

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

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

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

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

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

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

1 лайк

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

Сам в шоке :frowning:

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

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

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

3 лайка

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

1 лайк

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

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

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

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

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

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

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

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

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