Я прочла тред Какой должна быть идеальная структура проекта автотестов?, но все же остался неясным один момент.
Думаю над тем, как мне лучше организовать структуру своего проекта. Вопрос в следующем:
куда стоит включать повторяющиеся шаги теста - в Precondition Class (утилс класс) или в TestBase class.
Например, у нас есть джорни, где юзер проходит/заполняет:
форму регистрации
страницу верификации имейла
страницу выбора своего работодателя
странницу ввода id-шника
все действия последовательны, т.е. шаги идут один после другого
Я создала 4 отдельные пейджи для каждого из шагов с набором элементов/методов, присущих ей. Также создала Test Base класс со стандартными методами SetUp/TearDown, где бразуер инициализируется и удаляется соответственно.
И вот, например, в тестовом классе ‘страницы верификации имейла’ у меня в каждом тесте сначала выполняется шаг1. А в классе с тестами “странница ввода id-шника” в каждом тесте мне нужно в любом случае сначала пройти первых 3 шага, т.е. я уже пишу много дублирующихся строк.
Вопрос в том, куда мне вынести дублирующиеся шаги: в отдельный класс Preconditions либо же сделать TestBase абстрактным и имплементировать его для каждого тестового класса (т.е. для шага 4, я буду инициализировать браузер и проходить первые 3 шага в SetUp методе).
Надеюсь, понятно обрисовала ситуацию:slight_smile:
Спасибо всем заранее)
Лично для меня оба варианта выглядят не очень приемлемыми. Выносить в базовый класс прекондишены, специфичные для фиксированного сценария (набора) - решение совсем не универсальное. Т.е. если вам потребуется выполнить похожий финт для другого набора тестов, придется велосипедировать. Что в итоге еще усложнит и читабельность, и смысловую нагрузку BaseTest класса. Помимо этого, вы уже зарезервировали данный класс под задачи управления браузером. Следовательно, тестовой логики тут не должно быть. Иначе грань между фреймворком и доменным слоем просто сотрется. И ваш код рано или поздно превратится в спагетти.
У утилитных классов так же несколько иное предназначение. В ситуации, когда вы следуете более или менее ООП принципам, объединение логических цепочек разных страниц лучше сокрыть за фасадом (см. соответствующий паттерн), а не утилитным классом.
у меня на проекте джорни очень длинные - порядка 20-25 шагов и я тестирую функционал каждой страницы последовательно.
Т.е. когда мне нужно будет тестировать финальный дэшборд на 26м шаге, то сначала нужно будет 25 шагов сделать как pre-condition, а затем сам тест шагов 1-10, что не ок, как по мне.
я бы рассмотрел вариант генерации предусловий более простым путем нежели повторение 26 шагов.
Например, готовить сразу окружение через API/БД и сразу переходить на dashboard. Почему это невозможно?
А я не говорила, что это невозможно
Создание предусловий через API - это в планах пока. А вот про генерацию юзеров заранее и хранение их в базе (либо в csv в самом проекте) я не думала.
Спасибо вам!