Паттерны в автоматизации тестирования
GoF паттерны, SOLID принципы
Николай Алименков - паттерны проектирования
Page Object
элементы страницы (поля) и логика взаимодействия с
элементами (методы) описаны в отдельном классе
Page Element
повторяющиеся элементы (хедер, футер, меню, фильтр)
описаны в отдельном классе. Паттерн убирает
дублирование, упрощает поддержку. Связь со страницей
через композицию
Page Factory
создание объекта страницы и ленивая инициализация всех
элементов, которые описаны на этой странице
Envorement Factory
создание среды тестирования из связанных объектов
(тест/препрод/прод, источник/бд/апи/фронт)
Factory Method
создание объекта через метод, который может содержать
дополнительные действия/проверки. Driver Factory Method
- создание экземпляра WebDriver вынесено в отдельный
класс, список браузеров приведен в Enum
Object Pool (Flyweight)
чтобы не создавать каждый раз тяжелые объекты, а
использовать их пул, например, пул браузеров, пул
страниц, пул БД
Steps
создание методов, которые соответствуют логическим
шагам, например, открыть страницу, заполнить форму.
Описание приближено к тест-кейсам, все технические
подробности скрыты в реализации этих шагов
Fluent/Chain of invocations
цепочка событий. Используется вместе с шагами, помогает
построить определенный поток действий (выстроить методы
в цепочку, вызывая друг за другом), предоставляет
подсказки
Strategy
когда нужны несколько реализаций одного и того же,
например, регистрация через web/api
Builder
позволяет использовать только те поля формы, которые
нужны в данный момент
Decorator
динамическое добавление новых возможностей к
существующему объекту. Используется при наличии
множества комбинаций, является альтернативой
наследованию. Наследование используется на этапе
проектирования, Decorator - при динамическом получении
данных во время выполнения программы, например,
чай+сахар, чай+молоко, чай+сахар+молоко. Для Decorator
используется предлог "с" (чай с сахором)
Proxy
позволяет включить/отключить ресурсы/страницы, собрать
http-трафик, закешировать картинки/css
Bridge
позволяет связать иерархию абстракции с иерархией
реализации
Property Reader
считывает параметры из файла
Value Object
передача параметров ввиде объекта, например, User user
вместо String name, int age
Data Registry
позволяет генерировать уникальные данные и следить за их
уникальностью
Data Provider
выполнение тестов с разными данными, которые вшиты в
провайдер или подтягиваются из файла
Assert Object
размещение повторяющихся проверок в отдельном
статическом методе или классе. Убирает дублирование,
упрощает поддержку