Piority/DependencyJunit tests maven project

webdriver
junit
Теги: #<Tag:0x00007fedb8811e30> #<Tag:0x00007fedb8811ca0>

(Дима ТОК) #1

Добрый день.Есть набор тестов , хочу задать порядок их выполнения, и зависимость чтоб пока первый не прошел успешно следующий не выполнялся. На Junit так можно , ибо нашел массу примеров с TestNG.


(asolntsev) #2

Плохая идея. Не делайте так. Тесты не должны зависеть от порядка.


(vmaximv) #3

Я рассчитывал что ответ от"КЭП’а" в этом топике появится гораздо раньше :slight_smile:
А как ответите при таком раскладе:
Есть два кейса - “подписать документ”/“убрать подпись с документа”.
Засетапить данные для каждого кейса будет стоить вам минуту.
Депенд от “подписать” не будет вам стоить ничего.


(Михаил Братухин) #4

У меня есть проект где схожая ситуация. Есть связные кейсы, точнее по ряду причин необходимо создавать некоторые сущности, для тестирования определенных операций. Причем есть потребность иметь отдельные тесты, которые проверяют и создание и последующие трансформации. И эти атомарные операции могут выстраиваться в некоторые цепочки. И первый кирпичик может присутствовать почти во всех тестах, и сам по себе быть не очень быстрым. Получается что-то типа дерева с одним корнем и стаолом, а далее много ветвей, причем от них также могут идти ветви. Пришлось пока смирится с огромным оверхедом по ряду операций. Использовал у себя junit и в before методе вызов другого сценария и передачу данных из него в вызывающий сценарий. Что-то типа рекурсии. Один раз даже по ошибке из теста сам себя вызвал :sweat_smile: Но из того что я знаю про junit, то инструмент под задачу выбран топикстартером неверно. Junit все же сильно заточен под юнит тестирование и изолированность тестов. Для системного и интеграционного тестирования это может быть проблемой. Собственно, что и произошло. Если цепочки приходится строить (а это обычно не от хорошей жизни бывает, но просто других простых путей не видно или их вовсе нет), то лучше было взять правильный инструмент, т.е. TestNG, где есть возможность и указывать зависимости тестов друг от друга и много что еще и это все идет из коробки. Я костыль с зависимостями не стал создавать. Так как тесты мои хоть и “зависимы”, но цепочки между собой не связаны. И именно цепочки выступают в качестве независимых тестов, у которых нет проблем с общими данными. Но есть проблема оверхеда при работе тестов. Но пока это не та проблема из-за которой я бы стал переживать, да и тестовая модель пока очень куцая.


(asolntsev) #5

Я отвечу, что с вашим сетапом что-то не так.
Почему он занимает минуту? Это же просто insert в базу или что-то подобное. Разберитесь с этим. Сетап должен быть быстрым.


(vmaximv) #6

От не хотите вы думать-фантазировать :slight_smile:
Option 1) “Простой insert” - точнее 20-30 инсертов/апдейтов/делитов/хранимок/триггеров - которые очеень долго апдейтят DB - вы хотите переписать DB/API/Server-side в котором лежит очеень много человеко-лет? Увы, у заказчика нет ни денег, не желания.
Option 2) “Простой insert”. Но… У вас mobile-client, данные кешируются и рефрешатся раз в минуту. Объем большой - уменьшите рефреш-рейт - убьете total-performance.


(asolntsev) #7

Спасибо, что подтвердило мои слова: с вашим сетапом что-то не так :slight_smile:

Все эти проблемы решаются. Например, любые закэшированные данные надо чистить перед началом каждого теста.

Вместо того, чтобы решите эти проблемы, вы хотите создать проблемы в другом месте. И хотите вложить ещё много человеко-лет в сложные, нестабильные, неподдерживаемые тесты. Ну да, все так и делают. :frowning:


(vmaximv) #8

Вы сама простота - можно “почистить”,через рестарт симулятора - который будет вам стоить 40-50 секунд.
Будьте реалистом - вы в легаси “игрались” когда-нибудь?
Далеко не всем прилетает новый проект с нуля начинать - где ты и жнец, и швец и т.д.
А если вас захайрят на интерпрайз, то с вашей позицией вы вылетите через пару спринтов - ибо нефиг в чужой монастырь.[quote=“asolntsev, post:7, topic:13846, full:true”]
И хотите вложить ещё много человеко-лет в сложные, нестабильные, неподдерживаемые тесты.
[/quote]

Мимо - и по вашим концепциям можно создать тоже самое.

Резюмируя: вы не можете/не хотите балансировать между quality и business value


(asolntsev) #9

Не я сама простота, а все мы должны стремиться к простоте. :slight_smile:
Неужели нельзя почистить по-другому? Всяко же есть способы.

Конечно, с “легаси” я имею дело каждый день. Все мы имеем. Не бывает проектов без легаси.
Да, я понимаю, что их не так просто менять, и не скоро дело делается, но всё-таки делать что-то можно. Уж лучше, чем костыли поверх костылей строить.

Мы торопитесь резюмировать. Я никак не могу балансировать между вашими quality и business value, потому что я о них ничего не знаю. Балансировать - ваше дело, а я всего лишь отвечаю на изначальный вопрос, как было бы правильнее сделать.


(vmaximv) #10

Не было такого вопроса “как правильно” - вы просто пришли в топик и “вбросили”, даже не поинтересовавшись у топик-стартера зачем ему это надо.


(Oleksii Ihnatiuk) #11

Доброе утро, я думаю вам может помочь аннотация @Nested, которая есть в JUnit 5. Можете взглянуть на официальную документацию. Я лично не пробовал, но по описанию она создана именно для нужд, которые вы описали в вопросе.


(asolntsev) #12

Эта фича есть и в JUnit4, просто в пакете “experimental”.