madtester

madtester

Пикабушник
1038 рейтинг 122 подписчика 17 подписок 16 постов 0 в горячем
Награды:
10 лет на Пикабу
7

Пост №8. Создание своего test framework-а с нуля. Часть 4

Всем привет! В предыдущих постах я начал рассказывать про создание своего test framework-а с нуля. В них рассказывалось про выбор технологий, создание проекта в IDE, структуру и написание feature на языке Gherkin, создание Step-ов для реализации тестовой логики, описание page-ов, используя методологию Page Object Pattern. В сегодняшнем посте будут рассмотрены Util-классы, облегчающие написание page object и делающих тесты более гибкими и расширяемыми.


Итак, начнем. В примере, который мы рассматриваем, Util-классы можно условно разделить на два вида: Controllers - классы, отвечающие за определение типа элемента и действий с ними; и Utils - классы, связаные непосредственно с методологией Page Object Pattern.

Первоначально разберемся с классами Controllers. Данные классы служат для определения типа элемента на странице. Как было написано в предыдущем посте, это служит для облегчения работы с элементами страницы, т.к. в Controllers-классах прописаны используемые действия над ними (определенные правила работы с элементами), что избавляет нас от лишней копипасты и делает тесты более читаемые и понимаемые.

Как и в случае с Pages, в Controllers прописывается класс BaseElement.

В нем прописываются основные действия, которые могут применяться ко всем типам элементов, начиная от получения самого элемента, заканчивая кликом на него и определением доступности данного элемента.

Далее рассмотрим пример одного из типов элементов, например Textbox.

Как мы видим, в данном классе у нас прописаны основные действия над данным типом элементов. Так же стоит заметить, что нет четкой привязанности  определенному элементу, что позволяет использовать методы для множества элементов типа textbox. 

По подобному принципу написаны и остальные классы в package Controllers, т.е. все действия с элементами вынесены за рамки реализации тестовой логики, что облегчает понимание и последующую поддержку тестов.


Далее перейдем к package Utils. В нем расположены вспомогательные и конфигурационные классы. Начнем их рассматривать. 

Для начала следует обратить внимание, на класс WebDiverConfig. В нем находится конфигурация WebDiver, т.е. какой браузер запусать и с какими настройками отрывать сессию.

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

Следующим основным классном является PageObjectFactory, служащий для получения обыекта со страницы браузера.

Вспомогательными классом для PageObjectFactory являются классы  WrapperFactory,  CustomFieldDecorator и LocatingCustomElementListHandler. Данные классы служат для инициализации, индексации и локализации элементов на странице во время работы сессии браузера. Ниже приведу их примеры.

Ну и напоследок стоит уделить немного внимамия на последний из утилитных классов - это Configuration. Он служит для подключения property-файла к проекту. Так как в данный файл могут быть вынесены такие параметры, как URL тестируемого приложения и данные для входа пользователей, то данный класс нам крайне необходим.

Заключение.

Итак, в данном посте были рассмотрены вспомогательные классы test framework-а. После написания подобного набора классов, у вас не должно вознинуть больших проблем с написанием тестов, их поддержкой и масштабируемостью покрытия тестами системы.

На данном посте я заканчиваю серию о написании test framework-а. Если что-то осталось непонятным, то постараюсь ответить на все вопросы. Так же можно посмотеть исходники проекта на гитхабе.


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

Показать полностью 9
11

Пост №7. Создание своего test framework-а с нуля. Часть 3

Всем привет! В предыдущих постах я начал рассказывать про создание своего test framework-а с нуля. В них рассказывалось про выбор технологий, создание проекта в IDE, структуру и написание feature на языке Gherkin, создание Step-ов для реализации тестовой логики. Сегодня, как и обещал, начнем рассматривать описание page-ов, используя методологию Page Object Pattern.


Итак, начнем. Все классы, связанные с описанием страниц, по понятным приинам расположены в package-е java. Дабы не путаться и грамотно структурировать проект, все классы-pages располагаем в package Pages, все остальные вспомогательные в других packages. 

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

В данном классе реализованы такие методы, как: получение элемента, определение фрейма на странице, ожидание загруски JS и JQuery, заполнение формы значениями. Для примера можно рассмотреть метод заполнения формы элементами.

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

Далее рассмотрим пример написания класса, описывающего элементы страницы. 

Из примера видно, что первоначально происходит инициализация всех элементов на странице и вызов WebDriver-а. Для этого используется PageFactory совместно с FieldDecorator. Они позволяют проинициализировать и проиндексировать элементы страницы. Далее мы определяем необходимые нам элементы и присваиваем им имена. Так как у нас изначально были описаны типы элементов, то соответственно при присвоении имен, мы сразу же обозначили и тип элемента (например, public Textbox loginField, что означает, что данный элемент - это текстбокс). И после описания элементов происходит непосредственно написание действий над этими элементами. Ниже еще один пример описания страницы.

Заключение.

Итак, подведем итоги. В данном посте были рассмотрены примеры описания элементов страниц и их использование. В следующем посте будут рассмотрены Util-классы, облегчающие написание page object и делающих тесты более гибкими и расширяемыми.


З.Ы. Всем спасибо за внимание и интерес. Для тех, кому интересно посмотреть код проекта, то его можно найти по ссылке. Буду рад всем комментариям.

Показать полностью 5
9

Пост №6. Создание своего test framework-а с нуля. Часть 2

Всем привет! В предыдущем посте я начал рассказывать про создание test framework-а с нуля. В нем рассказал про выбор технологий, создание проекта в IDE, структуру и написание feature на языке Gherkin. Далее рассмотри создание Step-ов для реализации тестовой логики.


Итак начнем. Тестовая логика у нас прописана в feature-файлах. Для ее реализации необходимы Step-файлы. Они служат для перевода языка Gherkin, на язык программирования, в моем случае это Java. У IntelliJ IDEA есть замечательная настройка, позволяющая автоматически сгенерировать Step-файл для каждого из ключевых слов теста. На практие это выглядит так:


@When("^user send letter to \"([^\"]*)\"$")

public void userSendLetterTo(String arg0) throws Throwable {

//some code

}


Так как Step не является исполняемым классом, то он расположен в package "java"

Теперь рассмотрим на примере структуру Step-файла:

На изображении выше видно, что все ключевые слова реализованы уже на Java языке. Причем нужно не забывать, что при написании реализации ключевых слов необходимо четко указывать в скобках точную фразу, написанную в feature, иначе Step просто не подцепится и компиляция и выполнение теста не произойдет.

Так как я изначально использовал методологию Page Object Pattern, то при написании Step-ов мне всего навсего необходимо было проинициализировать page-и, а дальше уже использовать функции, реализованные в самих page-ах. Самым разумным решением, на мой взгляд, это произвети инициализацию в Before-методе используя PageObjectFactory, а объявление page-ов методом "@Autowired @Lazy" (cucumber). @Lazy говорит о том, что применение и инициализация того или иного page-а будет происходить только в момент его вызова, а не при старте теста. Это отчасти облегчает тест и немного увеличивает его скорость прохождения.

Так же необходимо незабывать писать javadoc-и, так как никогда не известно кто в дальнейшем будет поддерживать ваши тесты. Да и вряд ли вы сами после написания 100-200 тестов будете четко помнить что именно реализует тот или иной метод.

Еще одним из основных параметров, которые необходимо прописать в Step-ах - это @ContextConfiguration(locations = "/cucumber.xml"). Данный параметр указывает на то, где расположена конфигурация cucumber-тестов. В данном xml-файле описана основная конфигурация и описаны bean-ы, используемые в тестах. И так как он является конфигурационным файлом, он расположен в package-е resources.

Так же в package-е resources расположен еще один config-файл (target.properties), служащий для конфигурации адреса тестируемого приложения, данных пользователя и других часто используемых параметров.

Ну и для закрепления, ниже изображен еще один Step-файл

Залючение.

Итак, подведем итоги. В данном посте были рассмотрены правила и примеры написания Step-файлов, реализующих тестовую логику, прописанную в feature-файлах. Так же были рассмотрены конфигурационные файлы, используемые в тестах.


З.Ы. Всем огромное спасибо за внимание и интерес к моим постам. В следующем посте мы рассмотрим применение Page Object Pattern при описании элементов страниц.

Показать полностью 5
12

Пост №5. Создание своего test fraamework-а с нуля. Часть 1

Всем привет! Извините за долгое ожидание, не было времени на создание поста. Итак, немного поразмышляв я решил, что теория теорией, а практика куда полезнее и интереснее. И вот я решил начать серию пратических постов по созданию своего test framework-а с нуля. 


Для примера автоматизации был выбран один из простых и наглядных примеров - почтовая система rambler.ru Задачей автоматизации были выбраны одни из основных действий пользователя с почтовой системой, а именно: логин, написание и отправка письма, проверка отправки, перенос письма в трэш.


Перво наперво, необходимо создать чистый проект в IDE. Так как я привык использовать IntelliJ IDEA в качестве IDE, то я решил не изменять своему выбору и создал чистый Maven проект в ней. Далее пришло время определяться с языком. И тут я не стал изменять своему вкусу и опыту и выбрал Java. Но чтобы полностью не оставаться на достигнутых знаниях, решил реализовать свой test framework опираясь на BDD методологию. Мой выбор пал на Cucumber и Gherkin, так как данная связка хорошо совместима с Java. Сборка и запуск тестов будут реализованы с помощью maven.


Сразу хочу зказать, что на данный момент все тесты написаны и test famework готов. Но так как все в один пост не уместиться, то буду постепенно описывать его части.


Итак начнем. С начала хотелось бы представить структуру framework-а и пояснить, почему именно так.

Основными папками (packages) являются java и resources. Java - это package, служащий для хранения реализации тестовой логики и вспомогательных классов. Здесь и будет расположены описание страниц, шаги тестов и разнообразные утилит-классы. Resources - это выполняемый package, в котором расположены сами тесты и конфигурация к ним.

Та же, одним из основополагающих является pom.xml файл. Он служит для подключения всех библиотек и языковых фреймворков, для запуска тестов с определенной конфигурацией, для настройки отчетности. В общем - это корень всего проекта. Для наглядности продемонстрирую отрывок из файла:

С основными package-ами познакомились, а дальше буду описывать каждый по отдельности. 


Итак, в самом начале напишем сами тесты, которые нам необходимо будет реализовывать. Тесты будут написаны на языке Gherkin.

Gherkin - человеко-читаемый язык для описания поведения системы, который использует отступы для задания структуры документа, (пробелы или символы табуляции). Каждая строчка начинается с одного из ключевых слов и описывает один из шагов. Основными ключевыми словами являются Given, When, Then. Сама структура теста выглядит вот так:

А теперь подробнее. Для реализации теста мы создаем файл с расширением .feature. Далее начинаем писать сам тест. Первоначально пишется ключевое слово Feature - оно позволяет понять системе, что это исполняемый файл; так же служит обозначением наименования теста. 

Далее прописывается ключевое слово Scenario/Scenario Outline (первое это обычный сценарий, второе - сценарий, который будет использовать прописанные в Examples тестовые данные) - оно обозначает, что далее будет прописан сценарий теста.

Переходим к ключевым словам в сценарии. Given - как понятно из названия, в нем прописано то, что происходит в начале теста, т.е. первоначальные условия или первоначальные действия (например, логин пользователя в систему с определенными данными). When - здесь прописываются основные действия, которые пользователь совершает с системой, т.е. реализация цели теста (например, отправка письма). Then - прописываются постдействия либо ожидаемый результат исполнения When (например, проверка того, что письмо отправлено). Так же иногда используется ключевое слово And - используется для описания дополнительных действий к предыдущему ключевому слову (например, логаут пользователя из системы).

Если вам необходимо прогнать тест несколько раз, допустим, под разными пользователями, то необходимо использовать ключевое слово Examples - оно как раз служит для прописания значения необходимым параметрам теста (напрмер, логин и пароль пользователя). Для того, чтобы эти значения подцепились тестом, необходимо указать параметр теста в формате "<параметр>". По расцветке данного параметра можно будет понять, что он подцепил указанные значения из Examples.

И для наглядности, еще один пример теста:

Заключение.

Итак. В данном посте я начал описывать на практике реализацию создания test framework, рассказал об основных packages и о том, как создавать тесты используя язык Gherkin. В дальнейшем буду постепенно описывать структуру тестов.


З.Ы. Всем спасибо за внимание и интерес. Надеюсь было познавательно и не слишом мало. Буду очень рад вашим коментариям.

Показать полностью 5
12

Автоматизация тестирования ПО, или что это такое и какие виды и подходы бывают

Всем привет! Сижу на Пикабу уже довольно давно и часто встречаю довольно интересные и позновательные посты. И сегодня меня посетила мысль - а что если и мне поделиться с вами своими знаниями в области тестирования программного обеспечения, а точнее автоматизации тестирования. Сам в этой обасти работаю уже довольно прилично и есть что рассазать. Так как постов на данную тематику я пока что не встречал (простите если не так и они были), то хотелось бы услышать ваше мнение: стоит ли писать посты про автоматизацию тестирования, или это никому не будет интересно? И если все же стоит, и есть среди пикабушников мои коллеги, то хотелось бы услышать ваше мнение и предложение о том, что вам интереснее было бы почитать\узнать.


З.Ы. прошу не топите сильно в минусах если вам это не интересно. Для этого оставлю коммент в посте.

Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества