Имеется набор тестов - 100 шт. Тесты разбиты по классам согласно тестируемого функционала и выполняются в параллеле <parallel>classes</parallel>.
В связи с изменениями в тестируемом функционале, выполнение некоторых тестов параллельно стало невозможно: т.е. пока один тест “настраивает” окружение под себя, в ето время, параллельно с ним, другой тест благополучно “перенастраивает” ето же окружение для своих нужд, как результат - на выходе упавший тест из-за неверно настроенного окружения.
Было бы логично тесты, которые затрагивют “общие рессурсы” запускать в одном потоке, что бы они выполнялись последовательно, а все остальные, которые не мешают друг дргу - параллельно.
Данную проблему пытался решить с помощью штатных функций JUnit: Suite и Categories - но безрезультатно.
Подскажите, с помощью чего можно “группировать” тесты по потокам?
Тесты - реально независимы. Я могу по одиночке их запускать и все ок. Каждый для себя настраивает среду, а затем ее тестит. Но в том то и проблема…
Конечно, можно насоздавать кучу аккаунтов… но ет тож не выход…
Ну заверни все тестовые методы в один метод, декорируй его как тест, а с остальных декоратор убери. И пусть запускается первым. Получатся несколько правильных тестов и один большой+толстый, элементы которого будут зависеть друг от друга
Это не тру, но если выйдет хорошая экономия перформанса - так делать можно
Я так понимаю, под окружением Вы имеете в виду настройки аккаунта пользователя. В таком случае, Вам действительно необходимо каждый тест запускать под отдельным пользователем. В этом случае Вы будете абсолютно уверены в том, что настройки аккаунта не оказывают влияние на Ваши тесты. Кроме того, представьте ситуацию, когда заказчик присылает реквест на такую функциональность: не давать возможности 2-м пользователям сидеть под 1 логином в 1 момент времени. Иными словами, при логине Васей другого Васю вылогинивает (это, кстати, нормальное security требование для банковской среды, к примеру). В этом случае Ваши тесты внезапно перестанут выполняться в многопоточной среде.
Правильный подход: сделать Factory, генерирующую уникального пользователя с заданными параметрами для каждого теста, вызывать её в setup каждого теста и в tear down теста этого пользователя удалять.
Спасибо всем за ответы. Я решил глянуть в сторону TestNG - кажись там гибкость группирования тестов для выполнения - повыше, а так же есть возможность опряделять колличество потоков под конкретную группу.