Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

parallel
execution
junit
maven
java
Теги: #<Tag:0x00007f7b6914ac30> #<Tag:0x00007f7b6914a8e8> #<Tag:0x00007f7b6914a780> #<Tag:0x00007f7b6914a5a0> #<Tag:0x00007f7b6914a3e8>

(GorDi) #1

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

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

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

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

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

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


(Sewa Makhinya) #2

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


(GorDi) #3

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


(Sewa Makhinya) #4

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


(Павел Ветохин) #5

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


(Дмитрий Мирошник) #6

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


(GorDi) #7

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