t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007fd76961e048> #<Tag:0x00007fd76961deb8> #<Tag:0x00007fd76961ddf0> #<Tag:0x00007fd76961dcb0> #<Tag:0x00007fd76961dbc0> #<Tag:0x00007fd76961da08> #<Tag:0x00007fd76961d6e8>

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

Testing framework + CI

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

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

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

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

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

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

  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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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