[Resolved] Как правильно оргнизовать струтктуру набора тестов

Подскажите пожалуйста как правильно организовать структуру тестов в моем случае. Есть сайт доступный только залогиненным пользователям. То есть перед выполнением каждого теста надо логиниться. Сценарии относительно просты и не длинны. Проблема только в том что я не знаю как правильно организовать тесты.
Я вижу два пути:

  1. Писать Cept тесты в виде отельных php файлов и логиниться заново в каждом тесте добавив метод логин в хелперы;
  2. Писать Cest тесты в виде класса в котором первой фызывать функцию логин и потом каждая последующая функция в классе будет являться отдельным тестом.

Какие то следы, куки, история особого значения в моем случае не имеют.
Возможно есть какой то третий путь (к примеру как то не закрывать сессию по звершению теста?)
Если кого то разозлит мой вопрос - своей наивностью - прошу оставить его без критики. Путь начинающего автоматизатора и так достаточно тернист.
Заранее спасибо.

Вопрос хороший, я и сам его себе часто задаю )

Мне лично кажется, что лучше всего создать StepObject с методом для логина пользователя и логинить пользователя в каждом тесте. Альтернативно метод логина можно запихнуть в _before метод в соответсвующий хэлпер класс.

Если не хочется выполнять операцию логина каждый раз, можно не то чтобы не закрывать сессию, а скопировать куки пользователя и вгружать их в каждом новом тесте. Это тоже хорошо бы сделать в хэлпере.

1 лайк

Универсального способа нет, каждый решает для себя сам, исходя из особенностей тестируемого приложения.

Вот в этой теме обсуждался похожий вопрос.

У каждого способа есть плюсы и минусы.

Переиспользование общей сессии (и браузера) между тестами:

  • не тратится время на запуск/закрытие браузера и логин
  • усложнение кода фреймворка для обработки случаев некорректного завершения предыдущего теста
  • усложнение кода фреймворка для возможности параллельного запуска тестов

Использование уникальной сессии (и браузера) для каждого теста:

  • тратится время на запуск/закрытие браузера и логин
  • тесты полностью независимы

  • код фреймворка проще

1 лайк

Спасибо за ответы, заложусь на будщее - пойду по пути уникальной сесии для каждого теста

@davert правильно отписал, по-поводу создания стэпа для логина перед каждым сценарием. Сделайте метод

@BeforeMethod
LoginBeforeEachScenario();

И всё будет ясно и аккуратно. Вы же выполняете иммитацию реального пользователя, не вижу необходимости придумывать хаки - чтобы сэкономить 2-3 секунды.

Сам спросил, сам и отвечу, вдруг кому пригодится: Codeception - PHP Testing framework - PHP unit testing, PHP e2e testing, database testing раздел Refactoring. Незнаю почему раньше не нашел.

Мне больше всего пейджобжект нравится. создаешь страницу на которой золгиниться можно, вписываешь туда и логин и пароль и функцию пишешь туда “логин”, потом перед началом каждого теста,
ЛогинПейдж::логин(); и все ок
неплохо было бы написать тест о том что незалогиненый юзер не может оратиться к определенным частям\страницам сайта
вот можешь посмотреть как может выглядеть структура

Читал, отличный пост. Почерпнул для себя.