Java - Maven - JUnit: группировка тестов по потокам

Доброго времени суток, форумчане!

Имеется набор тестов - 100 шт. Тесты разбиты по классам согласно тестируемого функционала и выполняются в параллеле <parallel>classes</parallel>.

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

Было бы логично тесты, которые затрагивют “общие рессурсы” запускать в одном потоке, что бы они выполнялись последовательно, а все остальные, которые не мешают друг дргу - параллельно.

Данную проблему пытался решить с помощью штатных функций JUnit: Suite и Categories - но безрезультатно.

Подскажите, с помощью чего можно “группировать” тесты по потокам?

Это - припарки, костыли. Правильнее сделать так, чтобы тесты реально стали независимыми

Тесты - реально независимы. Я могу по одиночке их запускать и все ок. Каждый для себя настраивает среду, а затем ее тестит. Но в том то и проблема…
Конечно, можно насоздавать кучу аккаунтов… но ет тож не выход…

Ну заверни все тестовые методы в один метод, декорируй его как тест, а с остальных декоратор убери. И пусть запускается первым. Получатся несколько правильных тестов и один большой+толстый, элементы которого будут зависеть друг от друга
Это не тру, но если выйдет хорошая экономия перформанса - так делать можно

Что имеется ввиду под тестовым окружением?

Я так понимаю, под окружением Вы имеете в виду настройки аккаунта пользователя. В таком случае, Вам действительно необходимо каждый тест запускать под отдельным пользователем. В этом случае Вы будете абсолютно уверены в том, что настройки аккаунта не оказывают влияние на Ваши тесты. Кроме того, представьте ситуацию, когда заказчик присылает реквест на такую функциональность: не давать возможности 2-м пользователям сидеть под 1 логином в 1 момент времени. Иными словами, при логине Васей другого Васю вылогинивает (это, кстати, нормальное security требование для банковской среды, к примеру). В этом случае Ваши тесты внезапно перестанут выполняться в многопоточной среде.
Правильный подход: сделать Factory, генерирующую уникального пользователя с заданными параметрами для каждого теста, вызывать её в setup каждого теста и в tear down теста этого пользователя удалять.

1 лайк

Спасибо всем за ответы. Я решил глянуть в сторону TestNG - кажись там гибкость группирования тестов для выполнения - повыше, а так же есть возможность опряделять колличество потоков под конкретную группу.