Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Оптимальный уровень разпаралеливания тестов

maven
testng
gradle
parallel
junit
execution
ci
Теги: #<Tag:0x00007fedbc1abd80> #<Tag:0x00007fedbc1abc40> #<Tag:0x00007fedbc1abb00> #<Tag:0x00007fedbc1ab9c0> #<Tag:0x00007fedbc1ab790> #<Tag:0x00007fedbc1ab650> #<Tag:0x00007fedbc1ab510>

(S Romankov) #1

Подскажите оптимальный уровень разпаралеливания тестов, так сказать гуд практис, как варианты запуск на уровне сборщика Maven, Gradle, на уровне тестового фреймворка TestNG, Junit, возможно через билд агенты CI итд. И какие аргументы использовать именно этот уровень


(vmaximv) #2

Testing framework + CI


(S Romankov) #3

Почему не сборщик, в чем преимущества ?


(vmaximv) #4

Например можно задавать кол-во параллельных потоков в рантайме.


(S Romankov) #5

ну тут вопрос целесообразности в maven в одном месте указал количество потоков и все, для распаралелливания на уровне, к примеру testNG, нужно постоянно править XML


(Sergey Korol) #6

И как часто вам приходится менять кол-во потоков? Как правило, это происходит очень редко: при первой конфигурации и при обновлении железа, к примеру. В остальном, 1 поток для дебага, и N - для боевого запуска. Где N зависит от доступных вам ресурсов. Смысла уменьшать кол-во потоков в бою особого не вижу, ибо все как раз стремятся к сокращению времени прогона.

П.С. Сам использую вариант с TestNG xml. Но если речь о JUnit, то там частенько параллелят на уровне сборщика, ввиду специфики самого фреймворка. Forks vs Threads. Хотя, вариант с CI - тоже популярен.


(vmaximv) #7

Ну навскидку со своей мобильной колокольни:

  1. 1 real device на рабочей станции
  2. 3 real devices на рабочей станции
  3. X real devices на рабочей станции
  4. Y1+Y2+…+YN real devices на N тестовых стендах
  5. Z коннекшенов к клауду
  6. J local Android emulators (depends on free memory)
  7. 1 local IOS simulator (если захотеть можно и >1 но оставим для разнообразия)
    и т.д.
    Десктоп веб (браузеры) тоже имеет дифференциацию в этом вопросе - 1 IE instance per client etc.

Про форки я умолчу - там статью целую можно написать.


(Sergey Korol) #8

Как бы то ни было, все упирается в 2 проблемы: доступные ресурсы и стремление к минимизации времени прогона без ущерба покрытию.
Даже с мобильными девайсами я, в свое время, старался выжимать максимум из того, что было под рукой. А IE можно запускать в параллельных десктопах на одной машине.

Спорить не буду, ситуации бывают разные. Но лично мне никогда не приходилось часто менять кол-во потоков для прогона.


(Maxim Andryushchenkov) #9

Вообще, если не смотреть на инструменты вашего тестового фреймворка то есть одно универсальное решение: Docker Compose. Вкратце: вы создаете разные контейнеры - для базы, для приложения и тд, а также контейнер с тестами. Потом поднимаете все всю эту красоту изолированно друг от друга и запускаете ваши тесты на новом окружении. Мы так недавно сделали 4 таких окружения тем самым добились уменьшения времени автотестов в 4 раза. Также полезно сделать ручные джобы типа пересборка имейджа, клинап окружения, деплой окружения. А запуск тестов, перед которым у вас будут забираться последние изменения из репозитория, можно сделать автоматическим после коммита.


(vmaximv) #10

Если я вас правильно понял - то весь ваш ответ можно можно заменить на аббревиатуру CI.
К докеру тоже много вопросов - почему 4-ре, а не 8-мь. Что если DB - MSSQL, а клиент Safari?


(Maxim Andryushchenkov) #11

я ж не знаю ваш уровень, на всякий случай разжевал

Да в том и дело что это расширяемо, можно хоть 20 потоков запустить, были бы ресурсы

Не сталкивался и не хочется как-то, хрома пока вполне хватает


(Sergey Korol) #12

Я думаю, что последний поинт заключался в том, что не все можно впихнуть в докер контейнер. В частности то, что касается iOS / MacOS. Так что многое зависит от требований.


#13

У нас есть скрипт который на основе того сколько прошлый раз какой тест шёл сам параллелит тесты и выбирает оптимальное колличество тестов на каждой машине.


(Gordon Freeman) #14

Зачем это здесь писать?


#15

Челвоека интересует как можно паралельно запустить тесты, это 1 из вариантов хоть и не самый оптимальный.


(Gordon Freeman) #16

Так ты ж никак не помог человеку, просто написал о каком-то виртуальном волшебном скрипте и что он все делает :rofl:


#17

Ну так написал какой есть еще вариант или может мне еще весь скрипт скинуть и все настрйоки?


(Gordon Freeman) #18

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


#19

Почему же не отвечает? Можно паралелить на уровне CI? можно. Можно пралалелить на уровне TestNG? можно. Можно паралелить скриптом который сам выбирает нужные тесты? можно. В чём проблема?
Чем первый ответ более информативный чем мой?