Всем привет!
В написании тестов применила шаблон Page object. Есть класс, от которого все тесты наследуются. В нем есть аннотации @BeforeClass и @AfterClass (открытие и закрытие браузера по умолчанию)
В классе тестов от 1 до N тестовых методов, классы разбиты логически по функционалу. Например, логин из разных точек в приложении. В начале теста сам логин, проверка загрузки нужной страницы, лог аут.
Проблема:
Если первый тест упал (пример теста условный, для примера), то второй тест в этом классе запускается из точки падения, соответственно падает на первом шаге навигации к следующей форме логина.
Как можно решить эту проблему, чтобы упавший тест не влиял на следующий?
Видимо, логаут нужно делать не в самом тесте, а в методе @BeforeEach
или @AfterEach
. Тогда он будет выполняться в любом случае, даже если тест упал.
А вообще тема более обширная, тут есть много вариантов получше.
Вот потому что:
Архитектуру строят таким образом чтобы каждый тест стартовал условно с нуля (или с какими-то преднастрйками, но сейчас не об этом). С текущим подходом я мог бы рекомендовать два способа, первый уже высказал @asolntsev ответом выше, а второй - Добавить @BeforeMethod (@BeforeEach, в зависимости от тестраннера) который будет чистить куки браузера и открывать новую страницу, например того-же логина.
Можно поподробнее о других вариантах?
Если тест фэйлится, логаут не всегда просто осуществить, так как непонятно на каком шаге падает и как вызвать логаут с него
Мне кажется, я такой подход пробовала, но что-то пошло не так. Завтра ещё раз попробую, отпишусь. Может ещё какие-то варианты? Или вернуть к модели 1 класс = 1 тест, а сгруппировать тесты по пакетам?
Начиная с 38:27
И заодно:
- не надо использовать BaseTest класс для этой цели, потому что он пересоздается для каждого тест класса. для хранения переменной драйвера лучше использовать тест контекст
- не все методы авторизации используют куки, поэтому более универсальный способ это переиспользовать браузер контекст или просто не закрывать сам драйвер
- непонятен тест сценарий. зачем делать логаут в конце каждого теста?
Может есть примеры с гита? Пока не очень представляю, как реализовать
Про п3 - это пример, не более того. Логика чуть другая, тест может упасть в специфическом месте, на дойдя до нужного, а следующий это не учитывает, к примеру
Благодарю, ушла смотреть
2 - оч плохой совет. Потом получим странное поведение тестов в зависимости от элементов сессии, накопленных в предыдущих завершенных тестах. А ловить плавающие ошибки, спонтанно появляющиеся в зависимости от того, в каком порядке запускались тесты в мультипотоке… Бррр…