-
-
-
-
URL copied!
Автор: Олексій Волошин, Senior QA Automation Engineer, Consultant, GlobalLogic Ukraine
Окрім мов програмування, якими може бути написаний код для автоматизації тестування web-застосунків, радимо вивчити шаблони програмування, для використання їх разом з фреймворком Selenium. Їх, насправді, існує дуже багато, і не всі, відверто кажучи, корисні.
У цій колонці ми розберемо декілька найефективніших патернів програмування та покажемо їхнє застосування на проєкті. Поїхали!
Для початку, відповімо на питання:
Для чого потрібні шаблони?
Шаблони програмування, це свого роду, методики, які можуть допомогти розробнику розв’язати певні проблеми у певних ситуаціях. Іншими словами, вони можуть значно полегшити щоденну рутину то зробити проєктування більш оптимальним процесом.
Усі шаблони поділяють на три типи:
- Породжуючі (Creational)
- Структурні (Structural)
- Поведінкові (Behavioural)
Ми розглянемо шаблони з усіх цих типів на прикладі реального проєкту. Забігаючи наперед скажу, що проєкт досить простий, адже був написаний для того, щоб наочно продемонструвати, як можна вдосконалити код, використовуючи різні типи шаблонів. У нашому випадку це буде 8 патернів.
#1 Page Object
Автоматизовані тести з використанням шаблонів я проводитиму на сайті automationpractice.com. Перший шаблон, який я застосував, для тестування, це – Page Object. Цей патерн є одним з найбільш часто використовуваних архітектурних рішень в автоматизації. Проте, і один з тих, що найбільше піддається критиці розробників. Оскільки, шаблон містить досить багато коду на початку, його або досить важко розвернути молодому тестувальнику, або досить затратно з точки зору часу.
Але є і суттєві переваги даного рішення: для кожної сторінки веб додатку, що тестується, Page Object створює клас, в якому описуються веб елементи, які є на цій сторінці, та методи по взаємодії з ними. Тобто, з його допомогою ви можете створити окремі об’єкти та суттєво зменшити кількість коду, тому що одні й ті ж об’єкти сторінок можна використовувати у різних тестах.
Ось як виглядає Page Object у коді.
#2 Page factory
Другий шаблон, який ми розглянемо, це – Page Factory, який часто використовується у зв’язці з Page Object. Page Factory, це патерн який використовується для того, щоб ініціалізувати ваші сторінки та елементи на них. Як саме? Подивимось на прикладі.
#3 Builder
Цей патерн дозволяє розбити алгоритм створення складного об’єкта на окремі процеси. На додаток, він дозволяє уникнути так званого “хардкоду” та можливих помилок при копіюванні даних. Ось як це виглядає на практиці.
#4 Singleton
Цей шаблон допомагає створювати єдиний об’єкт instance класу і надає до цього об’єкту точку доступу. Насправді, використання цього шаблону в автоматизації дещо обмежене, проте знати його однозначно буде корисно. Глянемо, як він реалізується на нашому проєкті.
#5 Facade
Цей патерн дозволяє “заховати” складну систему класів за “гарним фасадом’’, тобто простим інтерфейсом. Ось як виглядає цей шаблон у коді.
#6 Strategy
Шаблон використовується коли потрібно визначити типи алгоритмів, які часто змінюються та винести їх у власні класи – стратегії. Щоб описати цей шаблон більш детально, я пропоную розглянути діаграму нижче:
Припустимо, що у нас є певний інтерфейс, який містить абстрактний опис методу doOperation. Цей метод імплементується декількома класами (у нашому прикладі – це математичні операції). Відповідно, метод doOperation має три види реалізації. І в цьому і є суть цієї стратегії. А тепер подивимось як реалізується даний шаблон на нашому проєкті.
#7 Decorator
Використання цього шаблону допомагає нам додавати новий функціонал до об’єкта, “огортаючи” його новими листами, не змінюючи при цьому його суть. Такий підхід часто називають Cabbage principle, або принципом матрьошки. Реалізується він на проєкті наступним чином.
#8 Factory
Фабричний метод це шаблон проєктування, який визначає загальний інтерфейс для створення об’єктів у суперкласах, дозволяючи при цьому підкласам змінювати тип об’єктів, які створюються. Якщо провести аналогію, то можна уявити собі фабрику, з якої логістика здійснюється кількома способами, і, власне, отримати те, що нам потрібно, ми можемо зробивши конкретний запит. А тепер пропоную подивитись, як цей метод виглядає у коді.
Власне, це був останній шаблон, який би ми хотіли сьогодні розібрати. Впевнені, що використання шаблонів з цього списку значно полегшить вам написання коду!
P.S. А ось посилання на проєкт, що ми створювали, на GitHub
Top Insights
Python: чому вивчати та з чого почати?
InsightsSoftwareAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologyТонкощі CV або Як скласти та куди надіслати,...
HRAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologyCI/CD для JS розробників. Частина перша – теорія
DevelopmentSoftwareAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologySoft and Hard Skills: Що важливіше? Розповідь одного...
HRAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnologyТОП автори
Категорії блогів
Давайте співпрацювати
Схожі теми
Від студента до Trainee-спеціаліста: історія випускника С++ GL BaseCamp
Почати шлях в ІТ під час навчання в університеті — ще той виклик, який вимагає наполегливості і постійної практики. Сергій Піскурський, студент та Trainee Specialist GlobalLogic, приєднався до компанії після проходження С++ GL BaseCamp. Хлопець поділився досвідом навчання перед курсом та підготовки до С++ GL BaseCamp. Чому ти вирішив вивчати С? Коли я почав думати … Continue reading Deep dive into using patterns with Selenium: огляд 8 шаблонів, що стануть у пригоді →
Більше
Share this page:
-
-
-
-
URL copied!